rt
昨天我们团队内部赛有一道最大生成树的板子。
#include<bits/stdc++.h>
#define f(i,a,b) for(int i = a ; i<=b ; i++)
using namespace std;
int n,m,x,y,z;
int fa[300005];
struct node{
int u,v,w;
}e[300005];
bool cmp(node x,node y){return x.w>y.w;}
int find_fa(int x){
if(fa[x] == x) return x;
return fa[x] = find_fa(fa[x]);
}
void unionn(int x,int y){
int fx = find_fa(x),fy = find_fa(y);
fa[fx] = fa[fy];
}
int kruskal(){
int cnt = 0,ans= 0;
sort(e+1,e+m+1,cmp);
f(i,1,m){
int u = e[i].u,v = e[i].v,w = e[i].w;
if(find_fa(u) == find_fa(v)) continue;
unionn(u,v);
ans+=w;
cnt++;
}
if(cnt == n-1) return ans;
else return 114514;
}
int main(){
cin>>n>>m;
f(i,1,n) fa[i] = i;
f(i,1,m){
cin>>e[i].u>>e[i].v>>e[i].w;
}
int ans = kruskal();
if(ans == 114514) cout<<"orz";
else cout<<ans;
return 0;
}
这份代码已知有两个问题
没开longlong,数组开小
为什么我开o2,同样的代码,#4#5会mle,
不开o2,#4#5RE
求大佬指点