各种奇怪的方法都试过了,但是 WA*4。
#include<bits/stdc++.h>
using namespace std;
int n,m,a[200010],b[200010],cost[200010],s,vis[200010],cnt;
map<int,int>ma;
vector<int>G[200010];
void dfs(int last,int s)
{
//cout<<cost[last]<<" "<<cost[s]<<endl;
//printf("node %d:%d node %d:%d\n",last,cost[last],s,cost[s]);
if(vis[s]&&cost[s]!=cost[last]^1){cout<<"No";exit(0);}
if(vis[s])return ;
vis[s]=1;
for(int i=0;i<G[s].size();i++)
{
int v=G[s][i];
if(cost[v]!=cost[s]^1&&vis[v]){cout<<"No";exit(0);}
cost[v]=cost[s]^1;
//vis[v]=1;
dfs(s,v);
vis[v]=1;
//cout<<s<<" "<<v<<endl;
}
}
int main()
{
cin>>n>>m;
for(int i=1;i<=m;i++){cin>>a[i];ma[a[i]]=1;}
for(int i=1;i<=m;i++){cin>>b[i];ma[b[i]]=1;}
for(auto i:ma)cnt++;
if(cnt>n){cout<<"No";return 0;}
s=a[1];
cost[s]=1;
for(int i=1;i<=m;i++)
{
G[a[i]].push_back(b[i]);
G[b[i]].push_back(a[i]);
}
//cout<<G[2].size()<<endl;
dfs(0,s);
int cnt=0;
for(int i=1;i<=200000;i++)if(vis[i]&&i>n){cout<<"No";return 0;}
cout<<"Yes";
return 0;
}