求反例 对了变猫娘
查看原帖
求反例 对了变猫娘
366430
AndyC楼主2024/8/27 17:21

在atcoder中ac11个点 wa26个点 马蜂良好

#include<bits/stdc++.h>


#define debug(...) fprintf(stderr,##__VA_ARGS__)


#define int long long
using namespace std;
inline int read() {int x=0,f=1; char ch=getchar();while(ch<'0'||ch>'9') { if(ch=='-') f=-1; ch=getchar();}while(ch>='0' && ch<='9') x=x*10+ch-'0',ch=getchar();return x*f;}
bool Men;

vector<int> edge[200005];
int n,k,fa[200005],vis[200005],b[200005];

void make(int nowat,int father){
	fa[nowat]=father;
	for(auto v:edge[nowat]){
		if(v==father) continue;
		make(v,nowat);
	}
}

int ans=0;

void get(int nowat,int dis){
	if(vis[nowat]==1){
		ans+=dis;
		return;
	}
	vis[nowat]=1;
	get(fa[nowat],dis+1);
}

bool Mbe;
signed main(){
	debug("%.8lfMB\n",(&Men-&Mbe)/1048576.0);
	
	n=read(),k=read();
	for(int i=1;i<n;i++){
		int a=read(),b=read();
		edge[a].push_back(b);
		edge[b].push_back(a);
	}
	int x;
	for(int i=1;i<=k;i++){
		x=read();
		b[i]=x;
		vis[x]=1;
	}
	
	make(x,x);
	
	for(int i=1;i<k;i++){
		get(fa[i],0);
	}
	
	cout<<ans+k<<endl;
	
	debug("%.8lfms\n",1e3*clock()/CLOCKS_PER_SEC);
	return 0;
}

/*
Good Luck You'll Need it.
*/

2024/8/27 17:21
加载中...