社区讨论
别的平台上通过了,洛谷这没通过。
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 条回复,欢迎继续交流。
正在加载回复...