Codeforces 659E 找环+(并查集/dfs)
来源:互联网 发布:会计应对大数据时代 编辑:程序博客网 时间:2024/05/17 06:58
题目:
http://codeforces.com/problemset/problem/659/E
题意:
给你一个图,现在要你给这个图里面的边定方向,使得入度为0的点最少。
分析:
对于一个连通块而言,如果里面存在一个环,那么必然所有点的入度都可以大于等于1
否则的话,就存在一个点的入度为0。
并查集:
#include <bits/stdc++.h>using namespace std;int n, m, u, v, fa[100005], a[100005];int findfa(int x){return fa[x] == x? x : fa[x] = findfa(fa[x]);}int main(){ scanf("%d%d", &n, &m); for (int i = 1; i <= n; i++) fa[i] = i, a[i] =0; for (int i = 1; i <= m; i++) { scanf("%d%d", &u, &v); u = findfa(u), v = findfa(v); if (u == v) a[u]++; //有环,标记一下 else fa[u] = v,a[v]+=a[u]; } int ans = 0; for (int i = 1; i <= n; i++) { if (findfa(i) == i) ans += a[i]==0? 1 : 0; } printf("%d\n", ans); return 0;}
看到网上的题解大多数是dfs,这也更好理解:
#include<bits/stdc++.h>using namespace std;const int N=1e5+5;vector<int>a[N];int flag;bool vis[N];void dfs(int u,int pre){ if(vis[u]){ flag=0; return; } vis[u]=1; for(int i=0;i<a[u].size();i++){ if(a[u][i]!=pre){ dfs(a[u][i],u); } }}int main(){ int n,m; scanf("%d%d",&n,&m); int x,y; for(int i=0;i<m;i++){ scanf("%d%d",&x,&y); a[x].push_back(y); a[y].push_back(x); } int ans=0; for(int i=1;i<=n;i++){ if(!vis[i]){ flag=1; dfs(i,-1); ans+=flag; } } printf("%d\n",ans); return 0;}
0 0
- Codeforces 659E 找环+(并查集/dfs)
- Codeforces 466E Information Graph(dfs+并查集)
- Mr. Kitayuta's Technology CodeForces - 505D(并查集+拓扑排序或dfs找环) 题解
- Codeforces Round #266 (Div. 2) E codeforces466e(dfs序+并查集)
- Codeforces Round #266 (Div. 2)-E. Information Graph(dfs+并查集)
- Codeforces 466E Information Graph【Dfs处理父子关系+并查集+离线查询】好题!
- Codeforces 228E The Road to Berland is Paved With Good Intentions 枚举dfs判断可行性 || 并查集
- codefoces_#346E - New Reform(并查集或dfs)
- [LCT维护最小生成树 || CDQ分治 || 线段树 并查集 dfs树] Codeforces 603E #334 (Div. 1) E. Pastoral Oddities
- Codeforces 9E Interesting Graph and Apples(并查集)
- codeforces 452E Three strings 后缀数组+并查集
- 【CodeForces】466E Information Graph 离线处理+并查集
- Codeforces 452E Three strings 后缀数组 + 并查集
- codeforces #576E Painting Edges 分治+并查集
- Codeforces 651E Table Compression【并查集】
- Codeforces Round 650E Clockwork Bomb(并查集)
- Codeforces 870E 并查集 解题报告
- [分治][并查集]Codeforces 603E. Pastoral Oddities
- 你将会是我一段不可或缺的路程,将会是另一个转折点
- Android开发学习笔记:TextView的属性详解 | android:duplicateParentState属性解释
- 获取文件行数
- 软件设计之旅(2)软件需求规格说明
- CodeForces 632E Thief in a Shop(DP|完全背包)
- Codeforces 659E 找环+(并查集/dfs)
- Java实现二叉树
- C++作业2:银行
- sublime text在ubuntu平台下的中文输入问题及解决
- Flex+BlazeDS+IntelliJ IDEA整合开发系列一之起步demo
- 【解题报告】Codeforces Round #303 (Div. 2)
- 08-maven同时下载源码
- 解决安卓TextView高度和textSize大小不一致问题 - 木杉是天才
- [BZOJ2461][BeiJing2011]符环(记忆化搜索)