zoj 3204 Connect them kruskal
生活随笔
收集整理的這篇文章主要介紹了
zoj 3204 Connect them kruskal
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?kruskal模板題
#include <iostream> #include <cstdio> #include <algorithm> #define MAX 102 using namespace std;struct edge {int x,y,w;edge(int x=0,int y=0,int w=0):x(x),y(y),w(w) {} } e[MAX*MAX]; struct node {int x,y; } pp[MAX*MAX];int T,n,num,ppnum; int fa[MAX];int getfather(int x) {if(x==fa[x])return x;else return fa[x]=getfather(fa[x]); }int cmp(struct edge aaa,struct edge bbb) {if(aaa.w==bbb.w){if(aaa.x==bbb.x) return aaa.y<bbb.y;else return aaa.x<bbb.x;}else return aaa.w<bbb.w; } int cmp1(struct node aa,struct node bb) {if(aa.x==bb.x) return aa.y<bb.y;else return aa.x<bb.x; } void kruscal() {int i;sort(e,e+num,cmp);int cnt=n;for(i=1; i<=n; i++)fa[i]=i;for(i=0; i<num; i++){int t1=getfather(e[i].x);int t2=getfather(e[i].y);if(t1!=t2){pp[ppnum].x=e[i].x;pp[ppnum].y=e[i].y;ppnum++;fa[t1]=t2;cnt--;if(cnt==1)break;}}if(cnt>1) {printf("-1\n");ppnum=0;} }int main() {int i,j;int a[102][102];scanf("%d",&T);while(T--){num=0;scanf("%d",&n);for(i=1; i<=n; i++)for(j=1; j<=n; j++)scanf("%d",&a[i][j]);for(i=1; i<n; i++)for(j=i+1; j<=n; j++)if(a[i][j]>0){e[num].x=i;e[num].y=j;e[num].w=a[i][j];num++;}ppnum=0;kruscal();sort(pp,pp+ppnum,cmp1);for(i=0;i<ppnum;i++){if(i!=ppnum-1){printf("%d %d ",pp[i].x,pp[i].y);}else printf("%d %d\n",pp[i].x,pp[i].y);}}return 0; }超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生
總結
以上是生活随笔為你收集整理的zoj 3204 Connect them kruskal的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hdu 3199 动态规划
- 下一篇: zoj 3209 Dancing lin