WA 求调
查看原帖
WA 求调
241485
Binary_Lee楼主2024/9/15 13:26
//If, one day, I finally manage to make my dreams a reality...
//I wonder, will you still be there by my side?
#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(false)
#define TIE cin.tie(0),cout.tie(0)
//#define int long long
#define y1 cyy
#define fi first
#define se second
#define cnt1(x) __builtin_popcount(x)
#define mk make_pair
#define pb push_back
#define pii pair<int,int>
#define ls(x) (x<<1)
#define rs(x) (x<<1|1)
#define lbt(x) (x&(-x))
#define inf 1e9
using namespace std;
int n,m,k,x,y,dep[500005],fa[500005][22],v[500005],N,id[500005];
long long ans,tot,tp[500005]; 
vector<int> a[500005];
struct node{
	int c,d,dp,idd;
}b[500005];
void dfs(int x,int col){
	for(int i=0;i<21;i++) fa[x][i+1]=fa[fa[x][i]][i];
	tp[x]=col,dep[x]=dep[fa[x][0]]+1;
	for(auto tmp:a[x]) fa[tmp][0]=x,dfs(tmp,col);
}
int LCA(int u,int v){
	if(dep[u]<dep[v]) swap(u,v);
	for(int i=21;i>=0;i--) if(dep[fa[u][i]]<=dep[v]) u=fa[u][i];
	if(u==v) return u;
	for(int i=21;i>=0;i--) if(fa[u][i]!=fa[v][i]) u=fa[u][i],v=fa[v][i];
	return fa[u][0];
}
bool cmp(node x,node y){
	if(x.dp^y.dp) x.dp>y.dp;
	return x.idd<y.idd;
}
signed main(){
	IOS;TIE;
	cin>>n>>m>>k;
	for(int i=1;i<=n;i++) cin>>v[i],id[i]=i;
	N=n;
	for(int i=1;i<=m;i++){
		cin>>x>>y;
		N++;
		a[N].pb(id[x]),a[N].pb(id[y]);
		id[y]=N;
	}
	for(int i=N;i>=1;i--) if(!fa[i][0]) dfs(i,i);
	for(int i=1;i<=k;i++){
		cin>>x>>y;
		if(tp[x]==tp[y]) b[++tot]={x,y,dep[LCA(x,y)],i};
	}
	sort(b+1,b+tot+1,cmp);
	for(int i=1;i<=tot;i++){
		int _1=b[i].c,_2=b[i].d;
		int mn=min(v[_1],v[_2]);
		if(mn) v[_1]-=mn,v[_2]-=mn,ans+=2ll*mn;
	}
	cout<<ans<<endl;
	return 0;
}

2024/9/15 13:26
加载中...