只A了一个点,麻烦看一看
查看原帖
只A了一个点,麻烦看一看
490978
小超手123楼主2022/3/16 20:03
#include <bits/stdc++.h>
using namespace std;
int n;
vector<int>p[100005];
bool vis[100005];
int gr[100005]; //记录每个节点的感染者人数 
int t=0;
queue<int>Q;
int main() {
	cin>>n;
	for(int i=1;i<n;i++){
		int u,v;
		cin>>u>>v;
		p[u].push_back(v);
	}
	Q.push(1);
	gr[1]=1;
	while(!Q.empty()){
		int x=Q.front();
		if(vis[x]==1)continue;
		vis[x]=1;
		Q.pop();
		for(int i=0;i<p[x].size();i++){
			if(gr[p[x][i]]==0)gr[x]++;
		}
		int k=0;
		while(pow(2,k)<gr[x])k++;
		t+=k;
		for(int i=0;i<p[x].size();i++){
		   if(gr[p[x][i]]==0){
		       gr[p[x][i]]++;
		       t++;
		       Q.push(p[x][i]); 
		   }
		}
	}
	cout<<t;
    return 0;
}
2022/3/16 20:03
加载中...