您的位置:首页 > 其它

[BestCoder] Round #25 1001 - Harry and Magical Computer | HDU 5154

2015-01-03 23:23 411 查看
题目给了中文描述,所以不再多说。

裸拓扑排序,直接用队列维护入度为零的结点,判断是否能完全删除M条边即可。
#include <stdio.h>
#include <map>
#include <queue>
#include <vector>
using namespace std;
int main()
{
int cnt, n, m, a, b, v[1000];
while(~scanf("%d %d", &n, &m))
{
cnt = 0;
vector<int> vv[101];
map<int, int> mm;
queue<int> qq;
for(int i = 0; i < m; i++)
{
scanf("%d %d", &a, &b);
vv[a].push_back(b);
mm[b]++;
}
for(int i = 1; i <= n; i++)
{
if(!mm[i] && vv[i].size())
{
qq.push(i);
}
}
while(!qq.empty())
{
int k = qq.front();
qq.pop();
for(int i = 0; i < vv[k].size(); i++)
{
mm[vv[k][i]]--;
if(!mm[vv[k][i]])
{
qq.push(vv[k][i]);
}
++cnt;
}
}
if(cnt == m)
{
printf("YES\n");
}
else
{
printf("NO\n");
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  acm BestCoder HDU