您的位置:首页 > 其它

并查集的几道题(hdu1198)(1232)(1272)(1598)

2012-08-03 20:26 288 查看
1232模板题

View Code

#include <iostream>
#include <stdio.h>
#include<string.h>
#include<algorithm>
#define N 1000001
using namespace std;
struct node
{
int u,v,w;
}q[1001];
int father[201];
int find(int x)
{
if(x!=father[x])
father[x] = find(father[x]);
return father[x];
}
void union1(int x,int y)
{
father[x] = y;
}
bool cmpp(struct node a,struct node b)
{
return a.w<b.w;
}
int main()
{
int i,j,k,m,n,u,v,w,o;
while(scanf("%d%d",&n,&m)!=EOF)
{
for(i = 0; i < m ; i++)
scanf("%d%d%d",&q[i].u,&q[i].v,&q[i].w);
sort(q,q+m,cmpp);
scanf("%d", &o);
while(o--)
{
scanf("%d%d",&u,&v);
k = N;
for(i = 0 ; i < m ; i++)
{
for(j = 1; j <= n ; j++)
father[j] = j;
for(j = i; j < m ; j++)
{
if(find(q[j].u)!=find(q[j].v))
union1(find(q[j].u),find(q[j].v));
if(find(u)==find(v))
{
w = q[j].w-q[i].w;

if(w<k)
k = w;
break;
}
}
if(j==m)
break;
}
if(k!=N)
printf("%d\n",k);
else
printf("-1\n");
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: