代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn=1000+5;
int fa[maxn];
int va[105][105];
struct node{
int u,v;
int weight;
}graph[105];
bool cmp(node a,node b)
{
return a.weight<b.weight;
}
int find(int x)
{
if(x==fa[x]) return x;
return find(fa[x]);
}
int main()
{
int n,m;
while(cin>>n>>m)
{
if(n==0) break;
memset(va,0,sizeof(va));
for(int i=1;i<=n;++i)
{
fa[i]=i;
}
for(int i=0;i<n;++i)
{
cin>>graph[i].u>>graph[i].v>>graph[i].weight;
}
sort(graph,graph+n,cmp);
int flag=0,sum=0;
for(int i=0;i<n;++i)
{
int fx=find(graph[i].u);
int fy=find(graph[i].v);
if(fx!=fy)
{
fa[fx]=fy;
sum+=graph[i].weight;
flag++;
}
}
if(flag==m-1)
{
cout<<sum<<endl;
}
else cout<<"?"<<endl;
}
return 0;
}
代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn=1000+5;
int fa[maxn];
int find(int x)
{
if(x==fa[x]) return x;
return find(fa[x]);
}
int main()
{
int n,m;
while(cin>>n>>m)
{
if(n==0) break;
for(int i=1;i<=n;++i)
{
fa[i]=i;
}
int sum=0;
for(int i=1;i<=m;++i)
{
int x,y;
cin>>x>>y;
int fx=find(x);
int fy=find(y);
if(fx!=fy)
{
fa[fx]=fy;
sum++;
}
}
cout<<n-sum-1<<endl;
}
return 0;
}
代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn=1000+5;
int fa[maxn];
struct node{
int u,v;
int weight;
int vis;
}graph[105];
bool cmp(node a,node b)
{
if(a.vis==b.vis)
return a.weight<b.weight;
else
return a.vis>b.vis;
}
int find(int x)
{
if(x==fa[x]) return x;
return find(fa[x]);
}
int main()
{
int n;
while(cin>>n)
{
if(n==0) break;
for(int i=1;i<=n;++i)
{
fa[i]=i;
}
int m=n*(n-1)/2;
for(int i=0;i<m;++i)
{
cin>>graph[i].u>>graph[i].v>>graph[i].weight>>graph[i].vis;
}
sort(graph,graph+m,cmp);
int flag=0,sum=0;
for(int i=0;i<m;++i)
{
int fx=find(graph[i].u);
int fy=find(graph[i].v);
if(fx!=fy)
{
fa[fx]=fy;
if(graph[i].vis==0)
sum+=graph[i].weight;
flag++;
}
if(flag==n-1)
{
cout<<sum<<endl;
break;
}
}
if(flag<n-1) cout<<"?"<<endl;
}
return 0;
}