解题思路:最小生成树,如果道路是好的就提前连上且不用成本
注意事项:
参考代码:
#include<bits/stdc++.h> using namespace std; int f[1000]; struct node { int from; int to; int w; }; int find(int x) { if(x!=f[x]) { return f[x]=find(f[x]); } return x; } long long ans=0; void meare(node a,bool t) { int x=find(a.from); int y=find(a.to); if(x!=y) { f[y]=x; if(t)ans+=a.w; } } vector<node>v; bool cmp(node a,node b) { return a.w<b.w; } int main() { int n; while(cin>>n&&n) { ans=0; for(int i=0;i<=n;i++) { f[i]=i; } for(int i=1;i<=(n*(n-1)/2);i++) { int d; node a; cin>>a.from>>a.to>>a.w>>d; if(d==1) { meare(a,0); } else { v.push_back(a); } } sort(v.begin(),v.end(),cmp); for(int i=0;i<v.size();i++) { meare(v[i],1); } v.clear(); cout<<ans<<endl; } return 0; }
0.0分
0 人评分
点我有惊喜!你懂得!浏览:2212 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:578 |
C语言训练-计算一个整数N的阶乘 (C语言代码)浏览:928 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:587 |
蛇行矩阵 (C语言代码)浏览:742 |
C语言程序设计教程(第三版)课后习题8.6 (C语言代码)浏览:577 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:510 |
C语言程序设计教程(第三版)课后习题8.1 (C语言代码)浏览:1242 |
【计算直线的交点数】 (C语言代码)浏览:1442 |
1118(求助_已解决)浏览:329 |