题目大意:
有个人当选了,然后承诺给大家接电缆,还是光缆什么的,反正不重要了。
然后就是最小生成树嘛,套算法,我知道为什么这一段的题学长都是一次ac了。 

#include #include #include #include #include #define N 120 using namespace std; struct edge { int s; int e; int v; }a[N*N]={0}; int dis[N][N]={0}; int boss[N]={0}; int n; int m=1; void biuld() { for(int i=1;i<=n;i++) { boss[i]=i; } } int bossnum() { int s=0; for(int i=1;i<=n;i++) { if(boss[i]==i)s++; } return s; } void input() { for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { scanf("%d",&dis[i][j]); } } m=1; for(int i=1;i<=n;i++) { for(int j=i+1;j<=n;j++) { a[m].s=i; a[m].e=j; a[m].v=dis[i][j]; m++; } } } bool cmp(edge x,edge y) { if(x.v>y.v)return 0; return 1; } bool is_connect(int x,int y) { if(boss[x]==x&&boss[y]==y) { if(x==y)return 1; else return 0; } return is_connect(boss[x],boss[y]); } void connect(int x,int y) { if(boss[x]==x&&boss[y]==y) { boss[x]=y; return; } boss[x]=boss[boss[x]]; boss[y]=boss[boss[y]]; connect(boss[x],boss[y]); } int my_kruskal() { int sum=0; biuld(); for(int i=1;i>n) { input(); for(int i=0;i<=m;i++) { for(int j=1;ja[j+1].v) { edge t; t=a[j]; a[j]=a[j+1]; a[j+1]=t; } } } //sort(a+1,a+m,cmp); /*for(int i=1;i

然而我不知道为什么,被注释掉的sort有什么错误,只要提交就是runtime error,换成这个冒泡就ac了。