标签:
如果已经建好,那就把vaule的值标记为0,然后模板走起,然后就没有然后了
数据量有点大,没关闭缓冲区TLE
#include<iostream> #include<vector> #define maxn 105 using namespace std; int n; const int inf=1<<31-1; vector<int>mapp[maxn]; int vaule[maxn][maxn]; int visit[maxn]; void prim()//prim算法 { int re=0; int d[maxn]; fill(d,d+n+1,inf); fill(visit,visit+1+n,0); d[1]=0; while(1) { int v=-1; for(int i=1;i<=n;i++) { if(!visit[i]&&(v==-1||d[i]<d[v])) v=i; } if(v==-1||d[v]==inf) break; re+=d[v]; visit[v]=1; for(int i=0;i<mapp[v].size();i++) { int x=mapp[v][i]; if(!visit[x]&&vaule[v][x]<d[x]) d[x]=vaule[v][x]; } } cout<<re<<endl; } int main() { cin.sync_with_stdio(false); while(cin>>n&&n) { for(int i=1;i<=n;i++) mapp[i].clear(); for(int i=0;i<n*(n-1)/2;i++) { int x,y,z,p; cin>>x>>y>>z>>p; if(x!=y) { mapp[x].push_back(y); mapp[y].push_back(x); if(p==1) { vaule[x][y]=0; vaule[y][x]=0; } else { vaule[x][y]=z; vaule[y][x]=z; } } } prim(); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/zafkiel_nightmare/article/details/47992805