HDU 1598--并查集+贪心
题意:中文题,不解释。
思路:按照Flycar的速度(即边权)排序,通过并查集依次将边添加进去,枚举各种情况。
AC代码:

1 #include<iostream> 2 #include<algorithm> 3 using namespace std; 4 struct node { 5 int s,t,v; 6 bool operator < (const node &cmp) const{ 7 return v<cmp.v; 8 } 9 }edge[1010]; 10 int p[222]; 11 int findx(int x) 12 { 13 if(x!=p[x]) 14 p[x]=p[findx(p[x])]; 15 return p[x]; 16 } 17 void merge(int x,int y) 18 { 19 p[findx(x)]=findx(y); 20 } 21 int main() 22 { 23 int n,m,i,j,q,s,t; 24 while(~scanf("%d %d",&n,&m)) 25 { 26 for(i=0;i<m;i++) 27 scanf("%d %d %d",&edge[i].s,&edge[i].t,&edge[i].v); 28 sort(edge,edge+m); 29 scanf("%d",&q); 30 while(q--) 31 { 32 scanf("%d %d",&s,&t); 33 int Min=0x3f3f3f3f; 34 for(i=0;i<m;i++) 35 { 36 for(j=1;j<=n;j++) 37 p[j]=j; 38 for(j=i;j<m;j++) 39 { 40 merge(edge[j].s,edge[j].t); 41 if(findx(s)==findx(t)) 42 { 43 Min=min(Min,edge[j].v-edge[i].v); 44 break; 45 } 46 } 47 } 48 if(Min==0x3f3f3f3f) 49 puts("-1"); 50 else 51 printf("%d\n",Min); 52 } 53 } 54 return 0; 55 }
posted on 2013-04-29 20:46 acoderworld 阅读(76) 评论(0) 收藏 举报
【推荐】2025 HarmonyOS 鸿蒙创新赛正式启动,百万大奖等你挑战
【推荐】博客园的心动:当一群程序员决定开源共建一个真诚相亲平台
【推荐】开源 Linux 服务器运维管理面板 1Panel V2 版本正式发布
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步