巧妙的大法师
  • 板块P2078 朋友
  • 楼主chenzhexuan1
  • 当前回复5
  • 已保存回复5
  • 发布时间2025/1/28 10:53
  • 上次更新2025/1/28 11:04:02
查看原帖
巧妙的大法师
1368930
chenzhexuan1楼主2025/1/28 10:53

其实这道题用大法师+set就可以AC。。。

#include <iostream>
#include <vector>
#include <cstring>
#include <set>
#define N 10010
using namespace std;
int n,m,p,q,a,b;
bool vis[N];
vector<int> ga[N],gb[N];
set<int> st;
void dfs(int p,int t){
	if(vis[p])return;vis[p]=true;st.insert(p);
	if(t==1){
		for(auto i:ga[p])dfs(i,t);
	}
	else{
		for(auto i:gb[p])dfs(i,t);
	}
}
int main(){
	cin>>n>>m>>p>>q;
	while(p--){
		int x,y;
		cin>>x>>y;
		if(x==y)continue;
		ga[x].push_back(y);
		ga[y].push_back(x);
	}
	while(q--){
		int x,y;
		cin>>x>>y;
		if(x==y)continue;
		gb[-x].push_back(-y);
		gb[-y].push_back(-x);
	}
	dfs(1,1);
	memset(vis,false,sizeof(vis));
	a=st.size();
	/*for(auto i:st)cout<<i<<' ';
	cout<<endl;*/
	st=set<int>();
	dfs(1,2);
	b=st.size();
	/*for(auto i:st)cout<<i<<' ';
	cout<<endl;*/
	cout<<min(a,b)<<endl;
}
2025/1/28 10:53
加载中...