#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();
}
}
hdu1879
最新推荐文章于 2021-03-18 07:10:08 发布