hdu 1598
来源:互联网 发布:数据找回软件 编辑:程序博客网 时间:2024/06/05 08:04
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1598
可以用并查集,也可以用二分+单元最短距离做。思路都差不多。都是枚举上下界。先将速度排序。然后枚举上界,添加其他节点。如果能使a->b联通,那么当前这个舒适值就是上界-新添加的这个节点(使a-b联通的)。
然后求一个最小值就行了。
下面是AC代码:
#include<cstdio>#include<algorithm>using namespace std;const int maxn = 210;struct node{ int s,e; int speed;}road[1010];int fa[maxn];bool cmp(const node a,const node b){ return a.speed>b.speed;}void init(){ for(int i=1;i<=210;i++) fa[i]=i;}int find(int x){ if(fa[x]!=x) return find(fa[x]); return fa[x];}int main(){ int n,m,Q,a,b; while(scanf("%d%d",&n,&m)!=EOF){ for(int i=0;i<m;i++){ scanf("%d%d%d",&road[i].s,&road[i].e,&road[i].speed); } sort(road,road+m,cmp); scanf("%d",&Q); while(Q--){ int min_val = 0x7fffffff,t_val; scanf("%d%d",&a,&b); for(int i=0;i<m-1;i++){ init(); t_val=0x7fffffff; int s=road[i].s, e=road[i].e; int fs=find(s); int fe=find(e); if(fs!=fe){ fa[fs]=fe; } if(find(a)==find(b)){ min_val=0; break; } for(int j=i+1;j<m;j++){ s=road[j].s; e=road[j].e; fs=find(s); fe=find(e); if(fs!=fe){ fa[fs]=fe; } if(find(a)==find(b)){ t_val=road[i].speed-road[j].speed; break; } } if(min_val>t_val){ min_val=t_val; } } if(min_val==0x7fffffff) min_val=-1; printf("%d\n",min_val); } } return 0;}
- hdu 1598
- hdu 1598
- HDU 1598
- hdu 1598
- hdu 1598
- hdu-1598
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- Hdu
- linux与unix开启与停止JAVA应用程序
- 想你,但不爱你
- <一>html 结构
- Windows 8 XAML实例教程系列
- JConsole
- hdu 1598
- 心醉七夕
- log4j异常,配置文件顺序不正确
- Source of Latex and JabRef
- oracle wm_concat函数的使用
- 相约世纪末
- 给自己的网站 地址栏加自定义图标
- ASP.net中aspx与cs函数的互调,知道这个很必要。
- oracle sqlplus基本操作