局域网
题目
就是一个图,求最小生成树,然后求被去除的边的价值。
输入
用线来表示联通
5 5
1 2 8
1 3 1
1 5 3
2 4 5
3 4 2
输出
去除的边的总价值
8
解题思路
求出最小生成树的价值然后线的总值减去最小生成树的价值
代码
#include<cstdio>
using namespace std;
int n,k,cost[101][101],lowcost[101],x,y,w,s,last,maxs;
bool ok[101];
int main()
{scanf("%d%d",&n,&k);for (int i=1;i<=n;i++)for (int j=1;j<=n;j++) cost[i][j]=23333333;//初始化for (int i=1;i<=k;i++){scanf("%d%d%d",&x,&y,&w);cost[x][y]=w;cost[y][x]=w;//联通maxs+=w;//求总值}for (int i=1;i<=n;i++) lowcost[i]=cost[1][i];//每个点到集合的最小值ok[1]=true;//封路for (int i=2;i<=n;i++){int k=0,mins=23333333;for (int j=1;j<=n;j++)if (!ok[j] && lowcost[j]<mins){mins=lowcost[j];k=j;}//找最近的店ok[k]=true;//标记s+=lowcost[k];//求和for (int j=1;j<=n;j++)if (lowcost[j]>cost[k][j]) lowcost[j]=cost[k][j]; //修正每个点到集合的最小值}printf("%d",maxs-s);//输出
}