社区讨论
萌新求助,为何内存爆了3个点
P1330封锁阳光大学参与者 3已保存回复 9
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 9 条
- 当前快照
- 1 份
- 快照标识符
- @mi85wxu4
- 此快照首次捕获于
- 2025/11/21 09:09 4 个月前
- 此快照最后确认于
- 2025/11/21 09:09 4 个月前
CPP
#include<bits/stdc++.h>
using namespace std;
int n,m;
int ver[200001],next[200001],head[10001],tot=0;
int vis[10001];
bool T=1,h[10001];
void add(int x,int y){
ver[++tot]=y,next[tot]=head[x],head[x]=tot;
return;
}
int dp(int root,int x,int data){
h[x]=1;
vis[x]=data;
int ans;
if(data==1) ans=1;
else ans=0;
for(register int i=head[x];i!=0;i=next[i]){
int y=ver[i];
if(y==root) continue;
if(vis[y]==vis[x]){
T=0;
return -1;
}
ans+=dp(x,y,data^1);
}
vis[x]=-1;
return ans;
}
int main(){
scanf("%d%d",&n,&m);
memset(head,0,sizeof(head));
for(register int i=1;i<=m;++i){
int t1,t2;scanf("%d%d",&t1,&t2);
add(t1,t2),add(t2,t1);
}
for(register int i=1;i<=n;++i) vis[i]=-1;
int ans=0;
memset(h,0,sizeof(h));
for(register int i=1;i<=n&&T;++i)
if(!h[i])
ans+=min(dp(0,i,0),dp(0,i,1));
if(T==0) printf("Impossible\n");
else printf("%d\n",ans);
return 0;
}
回复
共 9 条回复,欢迎继续交流。
正在加载回复...