求助

P2700 逐个击破

@[PartiallyCorrect](/user/571348) 1. 你没开 long long 2. 判断合并条件写错了 AC 代码: ```cpp #include<bits/stdc++.h> using namespace std; #define int long long const int N=200005; int fa[N]; bool used[N]; int find(int x){ return fa[x]==x?x:fa[x]=find(fa[x]); } void unionn(int x,int y){ x=find(x);y=find(y); fa[x]=y; } struct node{ int from,to,val; bool operator<(const node& t)const{ return val>t.val; } }; vector<node> edge; signed main(){ int n, k; int s = 0; cin >> n >> k; for(int i = 1 ; i <= k ; i ++) { int x; cin >> x; used[x] = true; } for(int i = 1 ; i < n ; i ++) { int x, y, z; cin >> x >> y >> z; edge.push_back({x, y, z}); //edge.push_back({y, x, z}); s += z; } sort(edge.begin(),edge.end()); int ans=0,cnt=0; for(int i=1;i<=n;i++) fa[i]=i; for(int i=0;i<edge.size();i++){ int x=find(edge[i].from); int y=find(edge[i].to); if(used[x]&&used[y]) continue; fa[x]=y; ans+=edge[i].val; if(used[x]) used[y]=true; else if(used[y]) used[x]=true; } cout<<s - ans; return 0; } ``` 有用求关~
by UncleSam_Died @ 2024-01-30 20:07:00


|