POJ
来源:互联网 发布:mac pro 魔兽世界 编辑:程序博客网 时间:2024/06/05 07:20
次小生成树
次小生成树和最小生成树相等就输出英文balabala
#include<iostream>#include<cmath>#include<string>#include<algorithm>#include<vector>#include<stdio.h>#include<map>#include<queue>#include<climits>#include<stdlib.h>#include<iomanip>#include<string.h>#include<cstring>using namespace std;/*********************************************/#define N 50000+5#define R (rt<<1|1)#define L (rt<<1)#define lson l,mid,L#define rson mid+1,r,R#define mid (l+r)/2#define INF 0x3f3f3f3f#define mem(arr,a) memset(arr,a,sizeof(arr))#define LL long long int#define sd1(a) scanf("%d",&a)#define sd2(a,b) scanf("%d%d",&a,&b)#define sd3(a,b,c) scanf("%d%d%d",&a,&b,&c)#define pd1(a) printf("%d",a)#define pd2(a,b) printf("%d%d",a,b)/**********************************************/struct edge{ int u, v, w; int del, equal, used;};edge es[N];bool cmp(edge a, edge b){ return a.w < b.w;}int t, n, m;bool flag;int par[N];int find(int x){ if (x == par[x])return x; return par[x] = find(par[x]);}int kruskal(){ int sum = 0; int cnt = 0; for (int i = 1; i <= n; i++)par[i] = i; for (int i = 1; i <= m; i++){ if (es[i].del)continue; int u = es[i].u; int v = es[i].v; int w = es[i].w; u = find(u); v = find(v); if (u != v){ par[u] = v; sum += w; if (flag)es[i].used = 1; cnt++; if (cnt >= n - 1) break; } } return sum;}int main(){ cin >> t; while (t--){ cin >> n >> m; for (int i = 1; i <= m; i++){ cin >> es[i].u >> es[i].v >> es[i].w; es[i].del = es[i].equal = es[i].used = 0; } for (int i = 1; i <= m; i++){ for (int j = 1; j <= m; j++){ if (i == j)continue; if (es[i].w == es[j].w)es[i].equal = 1; } } sort(es + 1, es + 1 + m, cmp); flag = true; int first = kruskal(); flag = false; int mark = 0; for (int i = 1; i <= m; i++){ if (es[i].equal&&es[i].used){ es[i].del = 1; int second = kruskal(); if (second == first){ printf("Not Unique!\n"); mark = 1; break; } es[i].del = 0; } } if (!mark)printf("%d\n", first); }}
阅读全文
0 0
- POJ
- poj
- POJ
- POJ
- poj
- poj
- POJ
- POJ
- poj
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- TensorFlow学习笔记(二)把数字标签转化成onehot标签
- javascript表单验证
- Linux 下安装 JDK
- 笨方法学python 习题16
- 深入理解iframe
- POJ
- LeetCode 13. Roman to Integer
- I
- 【005】Java语言(JDK长的命令行工具)
- Anaconda Navigator:could not find or load the QT platform plugin "window in"
- List 接口常用子类及其特点
- Java基础:Java 强制类型转换
- PAT (Basic Level) Practise (中文) 1047. 编程团体赛(20)
- 高德地图Web服务API简介