社区讨论
64pts求助,悬2关
P15547「Stoi2037」白色风车参与者 12已保存回复 14
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 14 条
- 当前快照
- 1 份
- 快照标识符
- @mm7ms5n5
- 此快照首次捕获于
- 2026/03/01 18:52 6 天前
- 此快照最后确认于
- 2026/03/04 16:55 3 天前
CPP
#include<bits/stdc++.h>
using namespace std;
int f[1000006];
int find(int x){
if(f[x]) return f[x]=find(f[x]);
else return x;
}
int n,m,x,y;
vector<int>g[1000005];
int col[1000005];
bool is(int start) {
queue<int>q;
q.push(start);
col[start]=1;
while(!q.empty()) {
int u=q.front();
q.pop();
for(int v:g[u]){
//2=3-1 1=3-2
if(col[v]==0) {
col[v]=3-col[u];
q.push(v);
} else if(col[v]==col[u]){
return 0;
}
}
}
return 1;
}
int vis[1000005];
int dis(int st,int en){
queue<pair<int,int>>q;
q.push({st,0});
int ans=1e9;
while(!q.empty()){
auto [u,d]=q.front();
q.pop();
if(u==en) {
ans=min(ans,d);
break;
}
for(int v:g[u]){
if(vis[v]) continue;
vis[v]=1;
q.push({v,d+1});
}
}
return ans;
}
void solve(){
cin>>n>>m>>x>>y;
bool fl=0;
for(int i=1;i<=m;i++){
int u,v;
cin>>u>>v;
for(int k:g[u]){
if(k==v) {
fl=1;
break;
}
}
g[u].push_back(v);
g[v].push_back(u);
if(find(u)==find(v)) continue;
f[find(u)]=find(v);
}
if(find(x)!=find(y)||n==m+1){
cout<<"No\n";
return ;
}
if(!is(x)){
cout<<"Yes\n";
}else{
if(dis(x,y)%2==1){
cout<<"Yes\n";
}else{
cout<<"No\n";
}
}
for(int i=1;i<=n;i++){
g[i].clear();
col[i]=f[i]=vis[i]=0;
}
}
signed main(){
std::ios::sync_with_stdio(false);cin.tie(0);
int id,t;
cin>>id>>t;
while(t--){
solve();
}
return 0;
}
回复
共 14 条回复,欢迎继续交流。
正在加载回复...