bzoj 2208: [Jsoi2010]连通数

一看就是缩点拓扑啊,可数据范围这么小,暴力即可啊。

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cstring>
 4 #include<cstdlib>
 5 #include<cmath>
 6 #include<queue>
 7 #include<algorithm>
 8 #include<vector>
 9 #define M 1000009
10 #define EPS 1e-10
11 #define MO 19650827
12 #define ll long long
13 using namespace std;
14 ll read()
15 {
16     char ch=getchar();
17     ll x=0,f=1;
18     for(;ch<'0'||ch>'9';ch=getchar())
19         if(ch=='-')
20           f=-1;
21     for(;ch>='0'&&ch<='9';ch=getchar())
22         x=x*10+ch-'0';
23     return x*f;
24 }
25 int f[M],ans,cnt,n,head[M],next[M],u[M];
26 char ch[M];
27 void jia(int a1,int a2)
28 {
29   cnt++;
30   next[cnt]=head[a1];
31   head[a1]=cnt;
32   u[cnt]=a2;
33 }
34 void dfs(int x,int y)
35 {
36   f[y]=x;
37   ans++;
38   for(int i=head[y];i;i=next[i])
39     if(f[u[i]]<x)
40       dfs(x,u[i]);
41 }
42 int main()
43 {
44    n=read();
45    for(int i=1;i<=n;i++)
46      {
47        scanf("%s",ch+1);
48        for(int j=1;j<=n;j++)
49          if(ch[j]=='1')
50            jia(i,j);
51      }
52    for(int i=1;i<=n;i++)
53      dfs(i,i);
54    printf("%d\n",ans);
55    return 0;
56 }
57 

 

posted @ 2016-07-07 21:59  xiw5  阅读(124)  评论(0编辑  收藏  举报