您的位置:首页 > 其它

Gym 100712F - Travelling Salesman

2015-08-04 11:28 330 查看


思路:

Kruskal

程序:
#define _CRT_SECURE_NO_WARNINGS

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
#include <set>
#include <map>
using namespace std;

#define ll __int64

#define L(u) ((u)<<1)
#define R(u) ((u)<<1|1)
#define lowbit(x) ((x)&-(x))
#define Cnt1(n) (__builtin_popcount(n))
#define max(x,y) ((x>y)?(x):(y))
#define min(x,y) ((x<y)?(x):(y))
#define PB push_back
#define sq(x) ((x)*(x))

#define rep(i,x,y) for(i=x;i<=y;i++)
#define rep0(i,x,y) for(i=x;i<y;i++)
#define mem(a, num) memset(a, num, sizeof(a))
#define cpy(to, from) memcpy(to, from, sizeof(from))

#define sd(x) scanf("%d",&x)
#define sd2(x,y) scanf("%d%d",&x,&y)
#define sd3(x,y,z) scanf("%d%d%d",&x,&y,&z)
#define slld(x) scanf("%I64d",&x)
#define slld2(x,y) scanf("%I64d%I64d",&x,&y)
#define slld3(x,y,z) scanf("%I64d%I64d%I64d",&x,&y,&z)
#define slf(x) scanf("%lf",&x)
#define slf2(x,y) scanf("%lf%lf",&x,&y)
#define sc(c) scanf("%c",&c);
#define ss(st) scanf("%s",st);

#define pd(x) printf("%d\n",x);
#define plld(x) printf("%I64d",x);
#define pcas() printf("Case %d: ", ++cas)
#define pn() putchar(10);

#define SA(a,i,n) rep(i,1,n) sd(a[i])
#define SA0(a, i, n) rep0(i,0,n) sd(a[i])
#define PA(a,i,n) rep0(i,1,n) printf("%d ", a[i]); pd(a[(n)])
#define PA0(a, i, n) rep0(i,0,(n)-1) printf("%d ", a[i]); pd(a[(n) - 1])

const int N = 100005;
const int inf = 0x3f3f3f3f;
const ll llinf = 0x3f3f3f3f3f3f3f3fLL;
const double pi = acos(-1.0);

struct node
{
int u, v, l;
}a
;

int f
;

bool cmp(node x, node y)
{
return x.l<y.l;
}

int ufs(int x)
{
return (x == f[x] ? x : f[x] = ufs(f[x]));
}

int main()
{
int t;
sd(t);
while (t--)
{
int n, m;
sd2(n, m);
int i;
rep(i, 1, n)
f[i] = i;
rep(i, 1, m)
sd3(a[i].u, a[i].v, a[i].l);

sort(a + 1, a + 1 + m, cmp);

int cnt = n;
rep(i, 1, m)
{
int x = ufs(a[i].u), y = ufs(a[i].v);
if (x != y)
{
f[x] = y;
cnt--;
}
if (cnt == 1)
break;
}

printf("%d\n", a[i].l);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: