hdu1879

来源:互联网 发布:香蕉地 c语言视频下载 编辑:程序博客网 时间:2024/06/05 18:12
#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int _max = 0x3f3f3f3f;const int maxn = 111;int map[maxn][maxn];bool  visit[maxn];int dist[maxn];int n;void prim(){     int sum1 = 0;     for(int i = 1; i <= n; i++)        dist[i] = map[1][i];     dist[1] = 0;     visit[1] = true;     for(int i = 1; i < n; i++)     {         int min = _max;         int k;         for(int j = 1; j <= n; j++)         {             if(!visit[j] && min > dist[j])             {                 min = dist[j];                 k = j;             }         }         visit[k] = true;         sum1 += min;         for(int j = 1; j <= n; j++)             if(!visit[j] && dist[j] > map[k][j])                dist[j] = map[k][j];     }     printf("%d\n", sum1);}int main(){    while(scanf("%d", &n)!=EOF&&n)    {        for(int i = 1; i <= n; i++)            for(int j = 1; j <= n; j++)            map[i][j] = _max;        for(int i = 0; i < n*(n-1)/2; i++)        {            int u, v, w, x;            scanf("%d%d%d%d", &u, &v, &w, &x);            if(x==1) map[u][v] = map[v][u] = 0;            else map[u][v] = map[v][u] = w;        }        memset(visit, false, sizeof(visit));        prim();    }}

原创粉丝点击