链接:http://acm.hdu.edu.cn/showproblem.php?pid=4324
题目大意:就是拓扑排序判环,如果存在环的话输出Yes,不存在的话输出No。
一开始超时了,觉得是不是因为cin,cout。改了,果然变成WA了orzzzzz
后来发现错在Yes,no的输出上面。。。打成了YES NO。。还有就是case的输出也是错了。。
感觉太过于急着想要AC这道水题了。。。反而贡献了好多的错。。。
总结:对于以后每一道题来说都要心平气和的做,最后不要急着交题。仔细检查一下,如果急着回宿舍可以过段时间再交题,千万不要急躁。。仔细检查避免犯低级错误,毕竟如果在赛场上罚时还是很可怕的orzzzzzzz
还有教训就是cin cout 要少用。。
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm>
using namespace std;
#define M 2009
int in[M];
vector <int> G[M];
int n;
int toposort()
{
queue<int> q;
for(int i = 1;i <= n;i++)
{
if(!in[i])
q.push(i);
}
int num = n;
while(!q.empty())
{
int cur = q.front();
q.pop();
n--;
for(int i = 0;i < G[cur].size();i++)
{
in[G[cur][i]]--;
if(!in[G[cur][i]])
q.push(G[cur][i]);
}
}
//cout << "debug---" << n << endl;
if(n>0) return 1;
return 0;
}
int main()
{
int t;
scanf("%d",&t);
int kase = 1;
while(t--)
{
memset(in,0,sizeof(in));
scanf("%d",&n);
for(int i = 1;i <= n;i++)
G[i].clear();
for(int i = 1;i <= n;i++)
{
getchar();
for(int j = 1;j <= n;j++)
{
char a;
a = getchar();
if(a=='1')
{
in[j]++;
G[i].push_back(j);
}
}
}
int ok = toposort();
printf("Case #%d: ",kase++);
if(ok)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}