社区讨论

别的平台上通过了,洛谷这没通过。

P1330封锁阳光大学参与者 3已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@mi4efl2p
此快照首次捕获于
2025/11/18 17:56
4 个月前
此快照最后确认于
2025/11/18 17:56
4 个月前
查看原帖
困惑啊
CPP
#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<string>
#include<cstdio>
#include<queue>
#include<stack>
#include<set>
#include<map>
#include<vector>
#include<climits>
using namespace std;
static int n,m,vis[10001],ans,clr[10001];
vector<int> G[10001];
bool flag=1;
inline void init()
{
    memset(clr,-1,sizeof(clr));
    scanf("%d%d",&n,&m);
    for(int i=1;i<=m;i++)
    {
        int x,y;
        scanf("%d%d",&x,&y);
        G[x].push_back(y);
        G[y].push_back(x);
    }
}
void bfs(int start)
{
    int q[40001]={0},h,t=1;
    q[0]=start;vis[start]=1;
    for(int i=0;i<G[start].size();i++)
    {
        int v=G[start][i];
        if(clr[v]!=-1)
        {
            clr[start]=!clr[v];
            break;
        }
    }
    if(clr[start]==-1) clr[start]=0;
    int cnt[2]={0};
    while(h<t)
    {
        int u=q[h++];
        h%=40000;
        cnt[clr[u]]++;
        for(int i=0;i<G[u].size();i++)
        {
            int v=G[u][i];
            if(!vis[v])
            {
                vis[v]=1;
              q[t++]=v;
              clr[v]=!clr[u];
              t%=40000;
            }
            if(!(clr[u]^clr[v]))
            {
                flag=0;
            }
            if(!flag) return;
        }
    }
    ans+=min(cnt[0],cnt[1]);
}
inline void solve()
{
    for(int i=1;i<=n&&flag;i++)
    if(!vis[i]) bfs(i);
}
int main()
{
     //freopen("e:/in.txt","r",stdin);
     init();
     solve();
     if(flag) printf("%d",ans);
     else printf("Impossible");
     return 0;
}

回复

2 条回复,欢迎继续交流。

正在加载回复...