UVa 11631 - Dark roads

时间:2023-03-09 04:20:10
UVa 11631 - Dark roads

  题目大意:*为了减小开支决定关闭一些路灯,同时保证照亮的路能连接所有路口。

  又是一个MST问题,Kruskal算法,不过数据规模比较大,又Submission Error了...扔这吧...

 #include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
typedef pair<int, int> ii;
#define MAXN 200100 int p[MAXN]; int find(int x)
{
return p[x] == x ? x : p[x]=find(p[x]);
} int main()
{
#ifdef LOCAL
freopen("in", "r", stdin);
#endif
int n, m;
while (scanf("%d%d", &n, &m) && (n || m))
{
int u, v, w;
int total_cost = ;
vector<pair<int, ii> > EdgeList;
for (int i = ; i < m; i++)
{
scanf("%d%d%d", &u, &v, &w);
total_cost += w;
EdgeList.push_back(make_pair(w, make_pair(u, v)));
}
sort(EdgeList.begin(), EdgeList.end());
for (int i = ; i < n; i++)
p[i]= i;
int cost = ;
for (int i = ; i < EdgeList.size(); i++)
{
w = EdgeList[i].first;
u = EdgeList[i].second.first;
v = EdgeList[i].second.second;
int pu = find(u);
int pv = find(v);
if (pu != pv)
{
cost += w;
p[pv] = pu;
}
}
printf("%d\n", total_cost-cost);
}
return ;
}