| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
水题 1A 附代码#include <cstdio>
#include <cstdlib>
#include <cstring>
#define N 101
using namespace std;
int n,e,father[N];
struct node {
int u,v,c;
node(){}
node(int u,int v,double c):u(u),v(v),c(c){}
}p[N*N];
void addnode(int u,int v,int c){
p[e++]=node(u,v,c);
}
int cmp(const void *a,const void * b){
node *aa=(node *)a;
node *bb=(node *)b;
return aa->c - bb->c;
}
int find(int x){
if(x!=father[x])
father[x]=find(father[x]);
return father[x];
}
void clear(){
for(int i=0;i<=n;i++)
father[i]=i;
}
int kruskal(int n){
clear();
int m=0, ans=0;
for(int i=0;i<e;i++){
int u=find(p[i].u);
int v=find(p[i].v);
if(u==v) continue;
for(int j=i+1;j<e;j++){
if(p[j].c!=p[i].c) break;
//printf("%d %d\n",)
if(find(p[j].u)==u&&find(p[j].v)==v){
//printf("sdya");
return -1;
}
}
m++;
ans+=p[i].c;
father[v]=u;
if(m==n-1)
break;
}
return ans;
}
int main(){
int t,l,a,b,c;
scanf("%d",&t);
while(t--){
e=0;
scanf("%d%d",&n,&l);
for(int i=1;i<=l;i++){
scanf("%d%d%d",&a,&b,&c);
if(a<b) addnode(a,b,c);
else addnode(b,a,c);
}
qsort(p,e,sizeof(p[1]),cmp);
int ans=kruskal(n);
if(ans==-1) printf("Not Unique!\n");
else printf("%d\n",ans);
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator