标签:
Description
Input
Output
Sample Input
Sample Output
#include<stdio.h> #include<algorithm> #include<queue> #include<stack> #include<string.h> #include<vector> using namespace std; typedef long long INT; const int maxn = 100100; struct Edge{ int from,to,dist,next; Edge(){} Edge(int _to,int _next):to(_to),next(_next){} }edges[maxn]; int tot, head[maxn]; void init(){ tot = 0; memset(head,-1,sizeof(head)); } void AddEdge(int _u,int _v){ edges[tot] = Edge(_v,head[_u]); head[_u] = tot++; } int dfs_clock, scc_cnt; int sccno[maxn], dfn[maxn], lowlink[maxn]; stack<int>S; void dfs(int u){ lowlink[u] = dfn[u] = ++dfs_clock; S.push(u); for(int i = head[u]; i != -1; i = edges[i].next){ int v = edges[i].to; if(!dfn[v]){ dfs(v); lowlink[u] = min(lowlink[u], lowlink[v]); }else if(!sccno[v]){ lowlink[u] = min(lowlink[u],dfn[v]); } } if(lowlink[u] == dfn[u]){ scc_cnt++; for(;;){ int x = S.top(); S.pop(); sccno[x] = scc_cnt; if(x == u){ break; } } } } void find_scc(int n){ dfs_clock = scc_cnt = 0; memset(sccno,0,sizeof(sccno)); memset(dfn,0,sizeof(dfn)); for(int i = 1; i <= n; i++){ if(!dfn[i]){ dfs(i); } } } int outdeg[maxn], indeg[maxn]; INT sccsz[maxn]; int main(){ int T, m, cas = 0; INT n; scanf("%d",&T); while(T--){ scanf("%lld%d",&n,&m); init(); int a,b; for(int i = 0; i < m; i++){ scanf("%d%d",&a,&b); AddEdge(a,b); } find_scc(n); printf("Case %d: ",++cas); if(scc_cnt == 1){ puts("-1");continue; } memset(indeg,0,sizeof(indeg)); memset(outdeg,0,sizeof(outdeg)); memset(sccsz,0,sizeof(sccsz)); for(int i = 1; i <= n; i++){ sccsz[sccno[i]]++; for(int j = head[i]; j != -1; j = edges[j].next){ int v = edges[j].to; if(sccno[i] == sccno[v]){ continue; } indeg[sccno[v]]++; outdeg[sccno[i]]++; } } INT ans = 0; for(int i = 1; i <= scc_cnt; i++){ if(indeg[i] == 0 ||outdeg[i] == 0){ ans = max( ans, (n*n - n - sccsz[i]*(n - sccsz[i]))-m ); } } printf("%lld\n",ans); } return 0; } /* 555 7 9 1 5 1 2 5 6 6 7 7 5 6 4 2 4 4 3 3 2 */
HDU 4635 —— Strongly connected——————【 强连通、最多加多少边仍不强连通】
标签:
原文地址:http://www.cnblogs.com/chengsheng/p/4943453.html