您的位置:首页 > 其它

hdu 5154 Harry and Magical Computer

2015-04-14 18:48 351 查看
简单的拓扑排序

#include<iostream>
#include<queue>
#include<vector>
#define maxn 100+1
using namespace std;
int n,m;
int head[maxn];
vector<vector<int> >mapp;
void topo()
{
queue<int>root;
for(int i=1;i<=n;i++)
{
if(!head[i]) root.push(i);
}
int t=0;
while(root.size())
{
int x=root.front();
root.pop();
t++;
for(int i=0;i<mapp[x].size();i++)
{
head[mapp[x][i]]--;
if(!head[mapp[x][i]]) root.push(mapp[x][i]);
}
}
if(t==n) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
int main()
{
while(cin>>n>>m)
{
mapp.resize(n+1);
for(int i=0;i<n+1;i++) head[i]=0,mapp[i].clear();
while(m--)
{
int x,y;
cin>>x>>y;
mapp[x].push_back(y);
head[y]++;
}
topo();
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: