您的位置:首页 > 其它

Coder-Strike 2014 - Round 1 D. Giving Awards

2014-04-19 21:57 295 查看
题目链接:

http://codeforces.com/contest/412/problem/D

题目大意:

给n个人发工资,但是因为ai欠bi钱,所以要避免ai后面是bi领工资。

思路:

利用dfs,遍历每个人的后继关系(后面的人欠前面的人钱),直到一个人后继无人(好别扭。。),就把他加入答案队列中。

AC代码:

#include<cstdio>
#include<vector>
using namespace std;
const int M = 3e4 + 20;
vector<int> v[M];
int ans[M], cnt;
bool vis[M];
void dfs(int a)
{
if(vis[a])
return ;
vis[a] = true;
for(int i = 0; i < v[a].size(); i++)
dfs(v[a][i]);
ans[cnt++] = a;
}
main()
{
int n, k;
scanf("%d %d", &n, &k);
while(k--)
{
int a, b;
scanf("%d %d", &a, &b);
v[a].push_back(b);
}
for(int i = 1; i <= n; i++)
{
if(vis[i])
continue;
dfs(i);
}
for(int i = 0; i < cnt; i++)
printf("%d ", ans[i]);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: