玄关样例未过求助
查看原帖
玄关样例未过求助
985320
TJB_LHY楼主2025/6/15 19:09
#include <bits/stdc++.h>
#define ll long long
#define U unsigned
using namespace std;
struct my_edge{
  int head[20005],nex[100005],to[100005],size;
  void push(int u,int v){
    nex[++size]=head[u];
    to[size]=v;
    head[u]=size;
  }
  void clear(){
    size=0;
    memset(head,0,sizeof head);
  }
}G;
int n,m,u,v,dfn[20005],tot,low[20005],cut[20005],num,root;
void tarjan(int u){
    dfn[u]=low[u]=++tot;
    int v,c;
    for(int i=G.head[u];i;i=G.nex[i]){
        v=G.to[i];
        if(dfn[v]){
            low[u]=min(low[u],dfn[v]);
        }else{
            tarjan(v);
            low[u]=min(low[u],low[v]);
            if(dfn[u]<=low[v]){
                c++;
                if(u!=root||c>1){
                    if(!cut[u])num++;
                    cout<<(u!=root)<<' ';
                    cut[u]=1;
                }
            }
        }
    }
}
int main() {
	cin.tie(0)->sync_with_stdio(0);
    cin>>n>>m;
    while(m--){
        cin>>u>>v;
        G.push(u,v);
        G.push(v,u);
    }
    for(root=1; root<=n; root++)
        if(!dfn[root])tarjan(root);
    cout<<num<<'\n';
    for(int i=1;i<=n;i++){
        if(cut[i]){
            cout<<i<<' ';
        }
    }
	return 0;
}
2025/6/15 19:09
加载中...