标签:clear namespace names als memset 今天 cloc sed lld
明明是Acm World Finals 2011的原题,把数据范围改小了就放出来了?!这样不好,,
昨天讲完双连通分量今天A一道点双的题。
9
1 3
4 1
3 5
1 2
2 6
1 5
6 3
1 6
3 2
6
1 2
1 3
2 4
2 5
3 6
3 7
0
Case 1: 2 4
Case 2: 4 1
1 #include<cstdio>
2 #include<iostream>
3 #include<cmath>
4 #include<vector>
5 #include<stack>
6 #include<cstring>
7 #define mxn 510
8 using namespace std;
9 struct Edge{
10 int from,to;
11 };
12 int dfn[mxn],iscut[mxn],belong[mxn];
13 int dfs_clock=0,cnt=0;
14 vector<int> G[mxn],bcc[mxn];
15 stack<Edge>s;
16 int dfs(int u,int fa){
17 int lowu=dfn[u]=++dfs_clock;
18 int child=0;
19 for(int i=0;i<G[u].size();i++){
20 int v=G[u][i];
21 Edge e=(Edge){u,v};
22 if(!dfn[v]){
23 s.push(e);child++;
24 int lowv=dfs(v,u);
25 lowu=min(lowu,lowv);
26 if(lowv>=dfn[u]){
27 iscut[u]=true;bcc[++cnt].clear();
28 while(true){
29 Edge x=s.top();s.pop();
30 if(belong[x.from]!=cnt){
31 bcc[cnt].push_back(x.from);
32 belong[x.from]=cnt;
33 }
34 if(belong[x.to]!=cnt){
35 bcc[cnt].push_back(x.to);
36 belong[x.to]=cnt;
37 }
38 if(x.from==u&&x.to==v) break;
39 }
40 }
41 }
42 else if(dfn[v]<dfn[u]&&v!=fa){
43 s.push(e);lowu=min(lowu,dfn[v]);
44 }
45 }
46 if(fa<0&&child==1) iscut[u]=0;
47 return lowu;
48 }
49 void init(){
50 memset(belong,0,sizeof(belong));
51 memset(dfn,0,sizeof(dfn));
52 memset(iscut,0,sizeof(iscut));
53 for(int i=1;i<mxn;i++)
54 G[i].clear();
55 dfs_clock=cnt=0;
56 }
57 int main(){
58 freopen("bzoj_2730.in","r",stdin);
59 freopen("bzoj_2730.out","w",stdout);
60 int n,k=0;
61 while(scanf("%d",&n)&&n){
62 init();int t=0;k++;
63 while(n--){
64 int a,b;
65 scanf("%d%d",&a,&b);
66 t=max(t,a);t=max(t,b);
67 G[a].push_back(b);
68 G[b].push_back(a);
69 }
70 for(int i=1;i<=t;i++)
71 if(!dfn[i])dfs(i,-1);
72 long long ans1=0,ans2=1;
73 for(int i=1;i<=cnt;i++){
74 int c=0;
75 for(int j=0;j<bcc[i].size();j++)
76 if(iscut[bcc[i][j]])c++;
77 if(c==1){
78 ans1++;
79 ans2*=bcc[i].size()-1;
80 }
81 }
82 if(cnt==1){
83 ans1=2;ans2=bcc[1].size()*(bcc[1].size()-1)/2;
84 }
85 printf("Case %d: %lld %lld\n",k,ans1,ans2);
86 }
87 }
标签:clear namespace names als memset 今天 cloc sed lld
原文地址:http://www.cnblogs.com/orzzz/p/7091610.html