Codeforces Round #357 (Div. 2) D. Gifts by the List
来源:互联网 发布:mac的mission control 编辑:程序博客网 时间:2024/09/21 09:21
题意
给你一个森林
然后给你每个人想要给谁礼物的意愿
这些人给礼物是根据一个列表,他们会从上往下看,看到第一个是他祖先的人,就会给这个人礼物
你需要构造一个列表,满足所有人的意愿。
题解:
直接dfs
如果这个人的意愿不是他自己,或者这个人的意愿和他的父亲不同的话,那么就输出无解,因为这样必然会和他的父亲发生冲突。
为什么呢?
如果a要给b礼物,那么a和b之间的所有人,都必须给b礼物。
答案的话,按照dfs顺序倒序输出就好了
#include <set>#include <map>#include <stack>#include <queue>#include <deque>#include <cmath>#include <vector>#include <string>#include <cstdio>#include <cstdlib>#include <cstring>#include <iostream>#include <algorithm>using namespace std;#define L(i) i<<1#define R(i) i<<1|1#define INF 0x3f3f3f3f#define pi acos(-1.0)#define eps 1e-9#define maxn 100100#define MOD 1000000007struct Edge{ int to,next;}edge[maxn];int n,m;int fa[maxn],dep[maxn];int tot,head[maxn],flag;vector<int> ans;void init(){ tot = 0; memset(head,-1,sizeof(head));}void add_edge(int u,int v){ edge[tot].to = v; edge[tot].next = head[u]; head[u] = tot++;}void dfs(int u){ for(int i = head[u]; i != -1; i = edge[i].next) { int v = edge[i].to; if(fa[v] != fa[u] && fa[v] != v) flag = 0; dfs(v); } if(fa[u] == u) ans.push_back(u);}int main(){ int t,C = 1; //scanf("%d",&t); while(scanf("%d%d",&n,&m) != EOF) { init(); memset(dep,0,sizeof(dep)); for(int i = 0; i < m; i++) { int u,v; scanf("%d%d",&u,&v); add_edge(u,v); dep[v]++; } for(int i = 1; i <= n; i++) scanf("%d",&fa[i]); flag = 1; ans.clear(); for(int i = 1; i <= n; i++) if(!dep[i]) dfs(i); if(!flag) printf("-1\n"); else { printf("%d\n",ans.size()); for(int i = 0; i < ans.size(); i++) printf("%d\n",ans[i]); } } return 0;}
0 0
- Codeforces Round #357 (Div. 2) D. Gifts by the List
- Codeforces Round #357 (Div. 2)-D. Gifts by the List
- Codeforces Round #357 (Div. 2)D:Gifts by the List
- Codeforces Round #357 (Div. 2) D. Gifts by the List
- Codeforces Round #357 (Div. 2) D Gifts by the List(DFS)
- Codeforces Round #357 (Div. 2) -- D. Gifts by the List(DFS)
- Codeforces Round #357 (Div. 2) -- D. Gifts by the List(DFS)
- [Codeforces Round #357 DIV2D (CF681D)] Gifts by the List
- 【33.33%】【codeforces 681D】Gifts by the List
- Codeforces 681D Gifts by the List【思维+Dfs】
- Codeforces 681D Gifts by the List dfs+构造
- Codeforces Round #441 (Div. 2, by Moscow Team Olympiad) D. Sorting the Coins 乱搞
- Codeforces Round #441 (Div. 2, by Moscow Team Olympiad) D. Sorting the Coins
- Codeforces Round #441 (Div. 2, by Moscow Team Olympiad) D. Sorting the Coins【规律】
- Codeforces Round #357 (Div. 2) D DFS
- Codeforces Round #378 (Div. 2) D. Kostya the Sculptor【贪心】
- Codeforces Round #378 (Div. 2)-D. Kostya the Sculptor(multiset)
- Codeforces Round #378 (Div. 2)D. Kostya the Sculptor
- 10.02
- 2016.10.6题解
- Android Studio的中文包错误:Can't find resource for bundle java.util.PropertyResourceBundle, key configurab
- AngularJs与ReactJS优缺点&适用场景
- DIY Linux/Mac OSX
- Codeforces Round #357 (Div. 2) D. Gifts by the List
- 在迪拜有个吃货男友是什么体验
- 文章标题
- Java是类型安全的语言,而C++是非类型安全的
- Android Studio导入viewpagerindicator
- 关于三种简单排序的想法
- 【转】拦截器与过滤器的区别
- 10.03
- Linux下查看CPU信息, 包括位数和多核信息