蒟蒻求助

P3469 [POI2008] BLO-Blockade

``` #include<iostream> #include<cstdio> #include<vector> #include<cstring> #define si 100006 using namespace std; inline int read() { int x=0,f=1; char ch=getchar(); while(ch<'0'||ch>'9') { if(ch=='-') f=-1; ch=getchar(); } while(ch>='0'&&ch<='9') { x=(x<<1)+(x<<3)+(ch^48); ch=getchar(); } return x*f; } int n,m,a,b,low[si],nums[si],dfn[si],num,vis[si]; vector<int> map[si]; void tarjan(int x,int fa) { low[x]=dfn[x]=++num; int tot=0; for(int i=0;i<map[x].size();i++) { int v=map[x][i]; if(dfn[v]==0) { tarjan(v,fa); low[x]=min(low[x],low[v]); if(low[v]>=dfn[x]&&x!=fa) vis[x]=1; if(x==fa) tot++; } low[x]=min(low[x],dfn[v]); } if(x==fa&&tot>=2) vis[x]=1; } void pd(int x) { nums[x]=(dfn[x]-1)*(n-dfn[x]+1)+(n-dfn[x])*dfn[x]+n-1; } int main() { memset (dfn,0,sizeof (dfn)); n=read();m=read(); for(int i=1;i<=m;i++) { a=read();b=read(); map[a].push_back(b); map[b].push_back(a); } for(int i=1;i<=n;i++) if(dfn[i]==0) tarjan(i,i); for(int i=1;i<=n;i++) { if(vis[i]==1) { int q; for(int j=0;j<map[i].size();j++) { if(dfn[map[i][j]]>dfn[i]) q=dfn[map[i][j]]; } nums[i]=(n-q+1)*(q-1)+(q-2)*(n-q+1+1)+(n-1); } else nums[i]=(n-1)*2; } for(int i=1;i<=n;i++) { cout<<nums[i]<<endl; } return 0; } ```
by PrincessYR✨~ @ 2020-03-05 05:35:34


为什么没有人回复,是太弱智了吗
by PrincessYR✨~ @ 2020-03-05 05:51:20


应该是宁太巨了QAQ
by Tristen @ 2020-03-05 08:25:42


|