HDU 5624 KK's Reconstruction
生活随笔
收集整理的這篇文章主要介紹了
HDU 5624 KK's Reconstruction
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這題目測是數據水了。我這種暴力寫法顯然是可以卡超時的。
假設有2000個點,15000條邊,前面10000條不能構成樹,后面5000條可以,這種數據顯然可以卡超時。
#include <stdio.h> #include <algorithm> #include <string.h> #include <queue> #include <stack> #include <map> #include <vector> using namespace std;const int maxn = 2000 + 10; const int maxm = 15000 + 10; const int inf = 0x7fffffff; int T; int n, m; struct Edge {int u;int v;int id;int val; }e[maxm]; int fa[maxn];bool cmp(const Edge&a, const Edge&b) {return a.val<b.val; }void read() {scanf("%d%d", &n, &m);for (int i = 1; i <= m; i++)scanf("%d%d%d", &e[i].u, &e[i].v, &e[i].val);sort(e + 1, e + 1 + m, cmp); }int Find(int x) {if (x != fa[x]) fa[x] = Find(fa[x]);return fa[x]; }void work() {int ans = inf;int i, j;int cnt;for ( i = 1; i <= m; i++){for ( j = 1; j <= n; j++) fa[j] = j;cnt = n;for ( j = i; j <= m; j++){int fu = Find(e[j].u);int fv = Find(e[j].v);if (fu == fv) continue;fa[fu] = fv; cnt--;if (cnt == 1){ans = min(ans, e[j].val - e[i].val);break;}}if (cnt != 1) break;}if (ans == inf) ans = -1;printf("%d\n", ans); }int main() {scanf("%d", &T);while (T--){read();work();}return 0; }?
轉載于:https://www.cnblogs.com/zufezzt/p/5189056.html
總結
以上是生活随笔為你收集整理的HDU 5624 KK's Reconstruction的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL运维实战系列:MySQL5.7
- 下一篇: docker 及 docker-comp