D求调
  • 板块学术版
  • 楼主BugGod
  • 当前回复7
  • 已保存回复7
  • 发布时间2023/11/4 21:46
  • 上次更新2023/11/5 03:08:46
查看原帖
D求调
541254
BugGod楼主2023/11/4 21:46

各种奇怪的方法都试过了,但是 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;
}
2023/11/4 21:46
加载中...