hdu 4786 Fibonacci Tree(并查集)
来源:互联网 发布:海龟交易法 知乎 编辑:程序博客网 时间:2024/04/28 09:54
题目链接:hdu 4786 Fibonacci Tree
解题思路
首先判断是否可以连通,然后对黑白边分别做并查集连通求连通分量,连通分量即为对应白黑边必须选的边数。
代码
#include <cstdio>#include <cstring>#include <vector>#include <algorithm>using namespace std;const int maxn = 1e5 + 5;//typedef pair<int,int> pii;int N, M, C[3], F[3][maxn];int find (int u, int* f) { return f[u] == u ? u : f[u] = find(f[u], f); }void link(int u, int v, int k) { int fu = find(u, F[k]); int fv = find(v, F[k]); if (fu != fv) { C[k]--; F[k][fu] = fv; }}void init () { scanf("%d%d", &N, &M); for (int i = 1; i <= N; i++) { for (int j = 0; j < 3; j++) F[j][i] = i; } C[0] = C[1] = C[2] = N; int u, v, k; for (int i = 0; i < M; i++) { scanf("%d%d%d", &u, &v, &k); link(u, v, k); link(u, v, 2); }}bool judge () { if (C[2] != 1) return false; int l = C[0]-1, r = N-C[1]; int p = 1, q = 1; while (q < N) { if (l <= q && q <= r) return true; int tmp = p + q; p = q; q = tmp; } return false;}int main () { int cas; scanf("%d", &cas); for (int kcas = 1; kcas <= cas; kcas++) { init(); printf("Case #%d: %s\n", kcas, judge () ? "Yes" : "No"); } return 0;}
0 0
- hdu 4786 Fibonacci Tree(并查集)
- hdu 4786 Fibonacci Tree (并查集+想法题)
- HDU 4786--Fibonacci Tree【并查集,最小生成树】
- 【并查集】 HDOJ 4786 Fibonacci Tree
- HDU 4786 Fibonacci Tree 并查集+生成树=kruskal
- HDU 4786 Fibonacci Tree (2013ACMICPC 成都站 F) 并查集
- 文章标题 HDU 4786 : Fibonacci Tree(最小生成树--kruskal+并查集)
- hdoj 4786 Fibonacci Tree (并查集)
- HDU4786:Fibonacci Tree(并查集)
- HDU 4786 Fibonacci Tree
- hdu 4786 Fibonacci Tree
- hdu 4786 Fibonacci Tree
- HDU 4786 Fibonacci Tree
- hdu 4786 Fibonacci Tree
- hdu 4786 Fibonacci Tree
- hdu 4786 Fibonacci Tree
- HDU 4786 Fibonacci Tree
- HDU-4786-Fibonacci Tree
- protocol buffer 编解码
- C#程序员经常用到的10个实用代码片段
- 链式栈简单模板代码
- JSONObject、JSONArray
- (35)Reverse Linked List
- hdu 4786 Fibonacci Tree(并查集)
- POJ 2253:Frogger 求每一条路径最大值里面的最小值
- hdu 4782 Beautiful Soup(模拟)
- PM 周刊第 1 期 2015-10-19
- Mac下Android的Eclipse开发环境的搭建
- HDU 5187 zhx's conte
- 微信支付不再免费,浅谈它的四年发展史
- IOS网络笔记--多线程编程2(线程安全--同步锁)
- Spring的好处