本题似乎存在严格线性做法
查看原帖
本题似乎存在严格线性做法
379916
董乐山2020楼主2024/3/22 20:37

rt。

#include<bits/stdc++.h>
using namespace std;
int n,m,p,vis[5005];
vector<int>e[5005];
void dfs(int i,int val) {
	vis[i]=val;
	for(auto j:e[i]) {
		if(!vis[j]) {
			dfs(j,val);
		}
	}
}
int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(nullptr);
	cin>>n>>m>>p;
	for(int i=1; i<=m; i++) {
		int u,v;
		cin>>u>>v;
		e[u].emplace_back(v);
		e[v].emplace_back(u);
	}
	for(int i=1; i<=n; i++) {
		if(!vis[i]) {
			dfs(i,i);
		}
	}
	for(int i=1; i<=p; i++) {
		int a,b;
		cin>>a>>b;
		if(vis[a]==vis[b]) {
			cout<<"Yes\n";
		} else {
			cout<<"No\n";
		}
	}
	return 0;
}

由于本题离线,这个做法似乎可以做到严格线性。

2024/3/22 20:37
加载中...