P10723求调
查看原帖
P10723求调
1123756
____QAQ____楼主2024/8/23 12:11
#include<bits/stdc++.h>
using namespace std;
int col[100001];
struct tree{
	int k;
	int f;
}node[100001];
queue<int> q;
int main(){
	int n;
	cin>>n;
	int whitecnt=0;
	for(int i=1;i<=n;i++){
		cin>>col[i];
		if(!col[i])whitecnt++;
	}
	for(int i=1;i<n;i++){
		int l,r;
		cin>>l>>r;
		node[r].f=l;
		node[l].k++;
	}
	for(int i=1;i<=n;i++){
		if(!node[i].k&&!col[i])q.push(i);
	}
	while(!q.empty()){
		int p=q.front();
		q.pop();
		node[node[p].f].k--;
		whitecnt--;
		if(!col[node[p].f]&&!node[node[p].f].k)q.push(node[p].f);
	}
	cout<<whitecnt;
	return 0;
}

QAQ 发表于 2024-08-23 12:06 回复楼主 #include<bits/stdc++.h> using namespace std; int col[100001]; struct tree{ int k; int f; }node[100001]; queue q; int main(){ int n; cin>>n; int whitecnt=0; for(int i=1;i<=n;i++){ cin>>col[i]; if(!col[i])whitecnt++; } for(int i=1;i<n;i++){ int l,r; cin>>l>>r; node[r].f=l; node[l].k++; } for(int i=1;i<=n;i++){ if(!node[i].k&&!col[i])q.push(i); } while(!q.empty()){ int p=q.front(); q.pop(); node[node[p].f].k--; whitecnt--; if(!col[node[p].f]&&!node[node[p].f].k)q.push(node[p].f); } cout<<whitecnt; return 0; } 思路:白色叶节点入队 将所有白色叶节点删除,将他们的爸爸的孩子数量统计都-1,再看还有木有白色孩子数量为0的节点

2024/8/23 12:11
加载中...