社区讨论

简单的模板哪里有问题?

P3388【模板】割点(割顶)参与者 3已保存回复 2

讨论操作

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

当前回复
2 条
当前快照
1 份
快照标识符
@mi6zhc1b
此快照首次捕获于
2025/11/20 13:21
4 个月前
此快照最后确认于
2025/11/20 13:21
4 个月前
查看原帖
直接从昨天做了的题中copy过来的。
那里都过了为什么这个模板题有问题?
先orz各位大佬。
CPP
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;

typedef long long ll;

const int N=100005;

int n,m;
int head[N],nex[N*2],to[N*2],cc=0;
int dfn[N],low[N],cl=0;
bool is[N];
int color[N],cnt;
int ans;

void addedge(int a,int b){
    nex[++cc]=head[a];
    head[a]=cc;
    to[cc]=b;
}

void qwq(int k,bool flag){
    int ch=0;
    dfn[k]=low[k]=++cl;
    
    for(int i=head[k];i;i=nex[i]){
        if(!dfn[to[i]]){
            ch++;
            qwq(to[i],0);
            low[k]=min(low[k],low[to[i]]);
            
            if(flag&&ch>=2)is[k]=1;
            if(!flag&&low[to[i]]>=dfn[k])is[k]=1;
        }else low[k]=min(low[k],low[to[i]]);
    }
}

int main(){
    int i,j;
    int a,b;
    scanf("%d%d",&n,&m);
    memset(head,0,sizeof(head)),memset(nex,0,sizeof(nex)),cc=0;
    for(i=1;i<=m;i++){
        scanf("%d%d",&a,&b);
        addedge(a,b),addedge(b,a);
	}
        
    memset(dfn,0,sizeof(dfn)),memset(low,0,sizeof(low)),memset(is,0,sizeof(is)),cl=0;
    for(i=1;i<=n;i++)if(!dfn[i])qwq(i,1);
    
    ans=0;
    for(i=1;i<=n;i++)if(is[i])ans++;
    printf("%d\n",ans);
    for(i=1;i<=n;i++)if(is[i])printf("%d\n",i);
    return 0;
}

回复

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

正在加载回复...