记录编号 |
454152 |
评测结果 |
AAAAAAAAAA |
题目名称 |
网络病毒 |
最终得分 |
100 |
用户昵称 |
Regnig Etalsnart |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.359 s |
提交时间 |
2017-09-28 14:11:15 |
内存使用 |
2.05 MiB |
显示代码纯文本
#include<cstdio>
#include<cstring>
#include<vector>
using namespace std;
const int maxn=1001;
int n,ans,dfn[maxn],vis[maxn],COL[maxn],color,cnt,i;
vector<int>G[maxn],GG[maxn],col[maxn],v[maxn];
void dfs1(int now)
{
vis[now]=1;
for(int j=0;j<G[now].size();j++)
{
int to=G[now][j];
if(!vis[to])dfs1(to);
}
dfn[++cnt]=now;
return;
}
void dfs2(int now)
{
vis[now]=1;
col[color].push_back(now);
for(int j=0;j<GG[now].size();j++)
{
int to=GG[now][j];
if(!vis[to])dfs2(to);
}
return;
}
int Main()
{
freopen("virus.in","r",stdin);freopen("virus.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++)for(int j=1;j<=n;j++)
{
int fuck;
scanf("%d",&fuck);
if((i!=j)&&(fuck))
{
G[i].push_back(j);
GG[j].push_back(i);
}
}
for(i=1;i<=n;i++)if(!vis[i])dfs1(i);
memset(vis,0,sizeof(vis));
for(i=n;i>=1;i--)if(!vis[dfn[i]]){color++;dfs2(dfn[i]);}
memset(vis,0,sizeof(vis));
for(i=1;i<=color;i++)for(int j=0;j<col[i].size();j++)
COL[col[i][j]]=i;
for(i=1;i<=n;i++)
{
int now=COL[i];
for(int j=0;j<G[i].size();j++)
{
int to=COL[G[i][j]];
if(now==to)continue;
v[now].push_back(to);
}
}
for(i=1;i<=color;i++)for(int j=0;j<v[i].size();j++)
vis[v[i][j]]=1;
for(i=1;i<=color;i++)if(!vis[i])ans++;
printf("%d\n",ans);
return 0;
}
int main(){;}
int syy=Main();