CodeForces - 883G(dfs)
2017-10-24 16:55
363 查看
题目:http://codeforces.com/contest/883/problem/G
题意:n点,m边,一个点s,输入m条边,有单向边和双向边,决定双向边的方向使得和s相连的点最多/最少
思路:很容易想到dfs,但是写起来很复杂,dfs的时候判断是不是双向边,是的话(最大值就是u->v,继续向下遍历;最大值就是v->u,直接截止)
代码(参考ZZY):
题意:n点,m边,一个点s,输入m条边,有单向边和双向边,决定双向边的方向使得和s相连的点最多/最少
思路:很容易想到dfs,但是写起来很复杂,dfs的时候判断是不是双向边,是的话(最大值就是u->v,继续向下遍历;最大值就是v->u,直接截止)
代码(参考ZZY):
#include <bits/stdc++.h> using namespace std; const int N = 400005; int op ,u ,v ,ans ,vis ; vector< pair<int,int> > G ; int sum; void dfs1(int u) { if(vis[u]) return; vis[u] = 1; sum++; for(auto y : G[u]) { if(op[y.second] == 1) dfs1(y.first); else if(!ans[y.second])//未访问过的双向边 { ans[y.second] = v[y.second] == y.first ? 1 : 2;//u->v 1 dfs1(y.first); } } } void dfs2(int u) { if(vis[u]) return; vis[u] = 1; sum++; for(auto y : G[u]) { if(op[y.second] == 1) dfs2(y.first); else if(!ans[y.second])//未访问过的双向边 { ans[y.second] = v[y.second] == y.first ? 2 : 1; } } } int main() { int n,m,s; cin >> n >> m >> s; for(int i = 1;i <= m;i++) { scanf("%d%d%d",&op[i],&u[i],&v[i]); G[u[i]].push_back(make_pair(v[i],i)); if(op[i] == 2) G[v[i]].push_back(make_pair(u[i],i)); } memset(vis,0,sizeof(vis)); memset(ans,0,sizeof(ans)); sum = 0; dfs1(s); printf("%d\n",sum); for(int i = 1;i <= m;i++) if(op[i] == 2) printf("%c",ans[i] == 1 ? '+' : '-'); printf("\n"); memset(vis,0,sizeof(vis)); memset(ans,0,sizeof(ans)); sum = 0; dfs2(s); printf("%d\n",sum); for(int i = 1;i <= m;i++) if(op[i] == 2) printf("%c",ans[i] == 1 ? '+' : '-'); printf("\n"); return 0; }
相关文章推荐
- dfs 遍历 codeforces 24A
- Codeforces 711D Directed Roads【Dfs+思维】
- CodeForces - 510B Fox And Two Dots(DFS)
- Codeforces 653B Bear and Compressing【DFS】
- CodeForces 526B Om Nom and Dark Park dp & dfs
- Codeforces 638C Road Improvement 【DFS】
- Codeforces 14D 求树的直径(网上大多数是DFS于是自己写了个BFS)
- CodeForces 686C Robbers' watch (dfs)
- Codeforces 842C Ilya And The Tree【Dfs】
- CodeForces - 711D Directed Roads(dfs判环)
- codeforces 258B Little Elephant and Elections 数位DP+DFS
- CodeForces 384E Propagating tree 树状数组dfs序组合使用
- CodeForces - 842C Ilya And The Tree 树上DFS
- Codeforces 510B Fox And Two Dots 【DFS】
- Codeforces 813C The Tag Game【思维+Dfs】
- Codeforces 29C:Mail Stamps(STL的应用+DFS)
- codeforces 711D D. Directed Roads(dfs)
- CodeForces 55B Smallest number(DFS)
- codeforces 682C Alyona and the Tree(DFS)
- codeforces 149D Coloring Brackets (区间DP + dfs)