commit
27e6f7ca19
@ -0,0 +1,99 @@
|
||||
#include<iostream>
|
||||
#include<algorithm>
|
||||
#include<cstring>
|
||||
#include<cmath>
|
||||
#include<cstdio>
|
||||
using namespace std;
|
||||
|
||||
const int INF = 1e9;
|
||||
const int maxn = 2e2 + 5;
|
||||
|
||||
struct edge{
|
||||
int u, v, w;
|
||||
edge() :u(),v(),w(){}
|
||||
edge(int a,int b,int c) :u(a),v(b),w(c){}
|
||||
bool operator<(const edge& op) const{
|
||||
return w < op.w;
|
||||
}
|
||||
} e[maxn*maxn];
|
||||
|
||||
int f[maxn], sum = 0;
|
||||
int used[maxn*maxn];
|
||||
void add_edge(int u,int v,int w){
|
||||
e[sum]=edge(u,v,w);
|
||||
sum++;
|
||||
}
|
||||
|
||||
int findroot(int x){
|
||||
return (f[x] == x )? x : (f[x]= findroot(f[x]));
|
||||
}
|
||||
|
||||
void init(int n){
|
||||
for (int i = 0; i <= n;i++){
|
||||
f[i] = i;
|
||||
}
|
||||
sum = 0;
|
||||
memset(used, 0, sizeof(used));
|
||||
}
|
||||
|
||||
int kruskal(int n,int m,int op){
|
||||
for (int i = 0; i <= n;i++){
|
||||
f[i] = i;
|
||||
}
|
||||
int ans=0,cnt=0;
|
||||
for (int i = 0; i < m;i++){
|
||||
if(i==op){
|
||||
continue;
|
||||
}
|
||||
int fx=findroot(e[i].u);
|
||||
int fy = findroot(e[i].v);
|
||||
if(fx!=fy){
|
||||
f[fy] = fx;
|
||||
ans += e[i].w;
|
||||
cnt++;
|
||||
if(op==-1){
|
||||
used[cnt - 1] = i;
|
||||
}
|
||||
if(cnt==n-1){
|
||||
return ans;
|
||||
}
|
||||
}
|
||||
}
|
||||
return (cnt < n - 1) ? INF : (ans);
|
||||
}
|
||||
|
||||
int main(){
|
||||
int t;
|
||||
cin >> t;
|
||||
int cas = 1;
|
||||
while (t--)
|
||||
{
|
||||
int n, m;
|
||||
cin>>n>>m;
|
||||
init(n);
|
||||
int u, v, w;
|
||||
int tt = m;
|
||||
while (tt--)
|
||||
{
|
||||
cin >> u >> v >> w;
|
||||
add_edge(u, v, w);
|
||||
}
|
||||
sort(e, e + m);
|
||||
int mst = kruskal(n,m,-1);
|
||||
int smst = INF;
|
||||
for (int i = 0; i < m;i++){
|
||||
smst = min(smst, kruskal(n, m, used[i]));
|
||||
}
|
||||
printf("Case #%d : ", cas++);
|
||||
if(mst==INF){
|
||||
printf("No way\n");
|
||||
}
|
||||
else if(smst==INF){
|
||||
printf("No second way\n");
|
||||
}
|
||||
else{
|
||||
printf("%d\n", smst);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
Loading…
Reference in new issue