SDKD Summer Team Contest S
来源:互联网 发布:淘宝商城童装毛衣女孩 编辑:程序博客网 时间:2024/06/04 18:15
F:点击打开链接
最小生成树;
#include<cstdio>#include<iostream>#include<string.h>#include<cstring>#include<algorithm>#include<vector>#include<set>using namespace std;const int maxn = 1e5 + 100;int p[maxn];int r[maxn];int F[maxn];struct node{ int u, v, c;}v[maxn];void init(){ for(int i = 0; i < maxn; ++i) { p[i] = i; r[i] = 0; }}int f(int x){ return x == p[x] ? x : p[x] = f(p[x]);}void unite(int x, int y){ x = f(x); y = f(y); if(x==y) return ; if(r[x] < r[y]) p[x] = y; else { p[y] = x; if(r[x] == r[y]) ++r[x]; } return ;}bool cmp1(node p, node q){ return p.c < q.c;}bool cmp2(node p, node q){ return p.c > q.c;}int main(){ int tmp[maxn]; memset(tmp,0,sizeof(tmp)); memset(F,0,sizeof(F)); tmp[0] = 1; tmp[1] = 2; F[1] = 1; F[2] = 1; for(int i = 2; tmp[i-2] + tmp[i-1] < maxn; ++i) { tmp[i] = tmp[i-2] + tmp[i-1]; F[tmp[i]] = 1; } int T; cin >> T; int kase =0; while(T--) { memset(v,0,sizeof(v)); int N, M; cin >> N >> M; for(int i = 0; i < M; ++i) { int u, k, c; scanf("%d%d%d", &u, &k, &c); v[i].u = u; v[i].v = k; v[i].c = c; } node res[maxn]; memset(res,0,sizeof(res)); init(); for(int i =0; i < M; ++i) res[i] = v[i]; for(int i = 0; i < M; ++i) { int x = f(res[i].u); int y = f(res[i].v); if(x == y) continue; else unite(res[i].u, res[i].v); } int cnt = 0; for(int i = 1; i <= N; ++i) if(p[i] == i) ++cnt; if(cnt != 1) { cout << "Case #" << ++kase << ": No" << endl; continue; } //=========================================== init(); memset(res,0,sizeof(res)); for(int i =0; i < M; ++i) res[i] = v[i]; sort(res,res+M, cmp1); int lower = 0; int upper = 0; for(int i = 0; i < M; ++i) { int x = f(res[i].u); int y = f(res[i].v); if(x == y) continue; else { if(res[i].c == 1) ++lower; unite(res[i].u, res[i].v); } } //========================================== init(); memset(res,0,sizeof(res)); for(int i =0; i < M; ++i) res[i] = v[i]; sort(res,res+M, cmp2); for(int i = 0; i < M; ++i) { if(f(res[i].u) == f(res[i].v)) continue; else { if(res[i].c == 1) ++upper; unite(res[i].u, res[i].v); } } //========================================= bool flog = false; for(int i = lower; i <= upper; ++i) { if(F[i]) { flog = true; break; } } if(flog) cout << "Case #" << ++kase << ": Yes" << endl; else cout << "Case #" << ++kase << ": No" << endl; } return 0;}
0 0
- SDKD Summer Team Contest S
- SDKD Summer Team Contest A
- SDKD Summer Team Contest B
- SDKD Summer Team Contest C
- SDKD Summer Team Contest D
- SDKD Summer Team Contest E
- SDKD Summer Team Contest F
- SDKD Summer Team Contest I
- SDKD Summer Team Contest K
- SDKD Summer Team Contest K
- SDKD Summer Team Contest R
- SDKD Summer Team Contest X ACM/ICPC 14 北京站现场赛
- SDKD 2016 Summer Single Contest #01.B
- SDKD 2016 Summer Single Contest #01.C
- SDKD 2016 Summer Single Contest #01.D
- SDKD 2016 Summer Single Contest #01.E
- SDKD 2016 Summer Single Contest #01.F
- SDKD 2016 Summer Single Contest #02.A
- 使用数据库管理工具navicat----命令行界面
- 安卓从sdcard中读取db文件
- [全职] 摩根大通-量化金融-北京
- Linux系统程序员的错误处理
- 排序算法(七)希尔排序
- SDKD Summer Team Contest S
- UML——类图
- Libgdx 之 饱和度与色相的渲染
- HDOJ 2824 The Euler function(欧拉函数+打表法)
- Linux系统C程序员的环境变量和环境表
- HDU 5399(Too Simple-判定映射)
- 每天进步一点点——Linux中的文件描述符与打开文件之间的关系
- OL记载Arcgis Server切片
- Linux系统C语言操作环境变量的函数