hdu 1598 find the most comfortable road
2011-11-23 16:17
302 查看
这题刚开始没想到要用并查集 结果没做出来
最后堕落了 查了一下别人的答案才知道的
先把边排序 由于边不多所以可以枚举任意两边和他们中间的边(排序后的)
如果使得两地点连接 则求出最大差 所以符合的情况的最大差中最小的便是答案
http://acm.hdu.edu.cn/showproblem.php?pid=1598
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
using namespace std;
struct node//保存边信息
{
int x,y,w;
}mem[1001];
int f[201];//并查集父节点
bool cmp(node a,node b)
{
return a.w<b.w;
}
inline int find(int i)//并查集寻父节点函数 你懂得
{
if(f[i]!=i)
f[i]=find(f[i]);
return f[i];
}
int main()
{
int Q,n,m,i,j,w,mmin,start,end;
while(scanf("%d%d",&n,&m)!=EOF)
{
for(i=0;i<m;i++)
scanf("%d%d%d",&mem[i].x,&mem[i].y,&mem[i].w);
sort(mem,mem+m,cmp);//排序
scanf("%d",&Q);
while(Q--)
{
mmin=10000001;
scanf("%d%d",&start,&end);
for(i=0;i<m;i++)
{
for(j=1;j<=n;j++)//初始化并查集
f[j]=j;
for(j=i;j<m;j++)
{
if(find(mem[j].x)!=find(mem[j].y))
f[find(mem[j].x)]=find(mem[j].y);
if(find(start)==find(end))
break;//已联通
}
if(j<m)
{
if(mem[j].w-mem[i].w<mmin)
mmin=mem[j].w-mem[i].w;
}
}
if(mmin==10000001)
printf("-1\n");
else
printf("%d\n",mmin);
}
}
return 0;
}
最后堕落了 查了一下别人的答案才知道的
先把边排序 由于边不多所以可以枚举任意两边和他们中间的边(排序后的)
如果使得两地点连接 则求出最大差 所以符合的情况的最大差中最小的便是答案
http://acm.hdu.edu.cn/showproblem.php?pid=1598
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
using namespace std;
struct node//保存边信息
{
int x,y,w;
}mem[1001];
int f[201];//并查集父节点
bool cmp(node a,node b)
{
return a.w<b.w;
}
inline int find(int i)//并查集寻父节点函数 你懂得
{
if(f[i]!=i)
f[i]=find(f[i]);
return f[i];
}
int main()
{
int Q,n,m,i,j,w,mmin,start,end;
while(scanf("%d%d",&n,&m)!=EOF)
{
for(i=0;i<m;i++)
scanf("%d%d%d",&mem[i].x,&mem[i].y,&mem[i].w);
sort(mem,mem+m,cmp);//排序
scanf("%d",&Q);
while(Q--)
{
mmin=10000001;
scanf("%d%d",&start,&end);
for(i=0;i<m;i++)
{
for(j=1;j<=n;j++)//初始化并查集
f[j]=j;
for(j=i;j<m;j++)
{
if(find(mem[j].x)!=find(mem[j].y))
f[find(mem[j].x)]=find(mem[j].y);
if(find(start)==find(end))
break;//已联通
}
if(j<m)
{
if(mem[j].w-mem[i].w<mmin)
mmin=mem[j].w-mem[i].w;
}
}
if(mmin==10000001)
printf("-1\n");
else
printf("%d\n",mmin);
}
}
return 0;
}
相关文章推荐
- hdu 1598 find the most comfortable road
- find the most comfortable road hdu 1598
- HDU 1598 find the most comfortable road(极差最小路)
- HDU 1598 find the most comfortable road
- hdu 1598 find the most comfortable road(并查集+暴力搜索)
- hdu 1598 find the most comfortable road (并查集 + 枚举)
- hdu1598 find the most comfortable road (枚举+并查集)
- HDU 1598 find the most comfortable road (并查集||最短路)
- hdu 1598 find the most comfortable road
- hdu 1598 find the most comfortable road
- HDU 1598 find the most comfortable road (MST)
- 【并查集+枚举】杭电 hdu 1598 find the most comfortable road
- HDU 1598 find the most comfortable road (枚举+Kruskal)
- HDU-1598-find the most comfortable road
- HDU 1598 find the most comfortable road(枚举+并查集,类似于最小生成树)
- HDU1598-find the most comfortable road
- HDU 1598 find the most comfortable road (暴力+kruskal)
- HDU 1598 find the most comfortable road (罗列+Kruskal) 并检查集合
- hdu 1598 find the most comfortable road(枚举+并查集)
- find the most comfortable road HDU - 1598 贪心+最小生成树