标签:pac test scanf div hdu while UI not output
Time Limit: 12000/4000 MS (Java/Others) Memory Limit: 104857/104857 K (Java/Others)
题意:给你n个点,m条边的有向图,最少加几条边使得改图为强连通;
思路:对于一个缩完点的图,要使得其强连通,入度和出度都至少为1;
#pragma comment(linker, "/STACK:1024000000,1024000000") #include<iostream> #include<cstdio> #include<cmath> #include<string> #include<queue> #include<algorithm> #include<stack> #include<cstring> #include<vector> #include<list> #include<set> #include<map> #include<stdlib.h> #include<time.h> using namespace std; #define LL long long #define pi (4*atan(1.0)) #define eps 1e-6 #define bug(x) cout<<"bug"<<x<<endl; const int N=1e5+10,M=1e6+10,inf=1e9+10; const LL INF=5e17+10,mod=1e9+7; struct is { int u,v; int next; }edge[50010]; int head[50010]; int belong[50010]; int dfn[50010]; int low[50010]; int stackk[50010]; int instack[50010]; int number[50010]; int in[N],out[N]; int n,m,jiedge,lu,bel,top; void update(int u,int v) { jiedge++; edge[jiedge].u=u; edge[jiedge].v=v; edge[jiedge].next=head[u]; head[u]=jiedge; } void dfs(int x) { dfn[x]=low[x]=++lu; stackk[++top]=x; instack[x]=1; for(int i=head[x];i;i=edge[i].next) { if(!dfn[edge[i].v]) { dfs(edge[i].v); low[x]=min(low[x],low[edge[i].v]); } else if(instack[edge[i].v]) low[x]=min(low[x],dfn[edge[i].v]); } if(low[x]==dfn[x]) { int sum=0; bel++; int ne; do { sum++; ne=stackk[top--]; belong[ne]=bel; instack[ne]=0; }while(x!=ne); number[bel]=sum; } } void tarjan() { memset(dfn,0,sizeof(dfn)); bel=lu=top=0; for(int i=1;i<=n;i++) if(!dfn[i]) dfs(i); } int main() { int i,t; while(~scanf("%d%d",&n,&m)) { memset(in,0,sizeof(in)); memset(out,0,sizeof(out)); memset(head,0,sizeof(head)); jiedge=0; for(i=1;i<=m;i++) { int u,v; scanf("%d%d",&u,&v); update(u,v); } tarjan(); int x=0; int z=0; for(i=1;i<=jiedge;i++) if(belong[edge[i].v]!=belong[edge[i].u]) { if(!out[belong[edge[i].u]])x++; if(!in[belong[edge[i].v]])z++; out[belong[edge[i].u]]++; in[belong[edge[i].v]]++; } x=bel-x; z=bel-z; if(bel==1) printf("0\n"); else printf("%d\n",max(x,z)); } return 0; }
hdu 3836 Equivalent Sets trajan缩点
标签:pac test scanf div hdu while UI not output
原文地址:http://www.cnblogs.com/jhz033/p/6937124.html