hdu 4313 Matrix (最小生成树krusual)
来源:互联网 发布:多米音乐 mac 编辑:程序博客网 时间:2024/05/22 17:13
题目链接
题目意思:有多个城市,多条路,路都是双向的,有一些城市有机器人大军,我们想通过破坏城市之间的城市来断绝机器人大军的联系,并且用最少的时间。
用krusual算法,并用mark标记存在有机器人的城市,有的两个城市之间的道路只有的1个机器人大军,剩下的就是要破坏的边。。。
#include"stdio.h"#include"stdlib.h"#include"string.h"int mark[100001],set[100001];__int64 ans;struct node{int x,y,t;}aa[100001];int find(int x){if(x==set[x])return x;return set[x]=find(set[x]);}int cmp(const void*a,const void*b){return (*(struct node*)b).t-(*(struct node*)a).t;}void merge(int x,int y){int fx,fy;fx=find(x);fy=find(y);if(fx==fy)return ;if(fx<fy){set[fy]=fx;mark[fx]+=mark[fy];}else {set[fx]=fy;mark[fy]+=mark[fx];}}int main(){int T,n,m,i,a,b,c,k,x,y;scanf("%d",&T);while(T--){scanf("%d%d",&n,&m);memset(mark,0,sizeof(mark));for(i=0;i<=n;i++)set[i]=i;ans=0;k=0;for(i=0;i<n-1;i++){scanf("%d%d%d",&a,&b,&c);aa[k].x=a;aa[k].y=b;aa[k].t=c;k++;ans+=c;}qsort(aa,k,sizeof(aa[0]),cmp);for(i=0;i<m;i++){scanf("%d",&a);mark[a]=1;}for(i=0;i<k;i++){x=find(aa[i].x);y=find(aa[i].y);//两个城市之间最多有一个城市有机器人if(mark[x]+mark[y]<=1){merge(x,y);ans-=aa[i].t;}}printf("%I64d\n",ans);}return 0;}
- hdu 4313 Matrix (最小生成树krusual)
- poj1861/zoj1542 (最小生成树krusual)
- HDU 4313 Matrix (最小生成树)
- poj 1251Jungle Roads (最小生成树:prime+krusual)
- hdu 4313 - Matrix(最小生成树,并查集)
- hdu 3367 Pseudoforest (krusual)
- HDU 4313 Matrix(并查集|最小生成树变种)
- HDU 4313 最小生成树
- hdu 4313 Matrix(最大生成树)
- 最小生成树计数(Kruskal+Matrix-Tree定理)
- hdu 2119 Matrix (最小覆盖)
- HDU 1102(最小生成树)
- HDU 3371(最小生成树,Prim)
- hdu 1102 (最小生成树)
- hdu 1863(最小生成树)
- hdu 2122 (prime 最小生成树)
- hdu 3371 最小生成树(有重边)
- hdu 1102(最小生成树)
- JNDI 在 J2EE 中的角色
- Android心得1.1--Android项目的目录与安装以及启动过程分析
- Wikipad个性游戏平板: 手柄+Jelly Bean
- Apache HTTP 服务器的虚拟主机设置
- 应届毕业生的个人工作总结
- hdu 4313 Matrix (最小生成树krusual)
- Android学习札记40:关于安全退出已创建多个Activity的应用(3)
- aspnetpager实例
- 【设计模式】之组合模式(Composite)
- SQLite作用及用法
- 算法导论第二章POJ水题
- mac mountain lion ORACLE SQL Developer 打不开的解决方法
- 拉链型耳机:无需担心线会缠绕
- apt命令总结