社区讨论

可爱美少女初学oi,卡样例求条

P2860[USACO06JAN] Redundant Paths G参与者 3已保存回复 4

讨论操作

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

当前回复
4 条
当前快照
1 份
快照标识符
@mlhe50y2
此快照首次捕获于
2026/02/11 10:08
上周
此快照最后确认于
2026/02/12 20:25
7 天前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
const int M=1e4+5;
const int N=5005;
int n,m,h[N],ne[M*2],to[M*2],idx;
void add(int u,int v)
{
    to[idx]=v;
    ne[idx]=h[u];
    h[u]=idx++;
}
int dfn[N],low[N];
stack<int> stk;
int ti=1;
int cnt_dcc;
int dcc[N];
void tarjan(int u,int lst_i)
{
    dfn[u]=low[u]=ti++;
    stk.push(u);
    for(int i=h[u];~i;i=ne[i])
    {
        if(i==(lst_i^1)) continue;
        int j=to[i];
        if(!dfn[j])
        {
            tarjan(j,i);
            low[u]=min(low[u],low[j]);
        }else low[u]=min(low[u],dfn[j]);
    }
    if(dfn[u]==low[u])
    {
        int y=stk.top();
        cnt_dcc++;
        do
        {
            y=stk.top();
            dcc[y]=cnt_dcc;
            stk.pop();
        }while(y!=u);
    }
}
int u[M],v[M];
int lef;
int deg[N];
int main()
{
	memset(h,-1,sizeof h);
	cin>>n>>m; 
    for(int i=1;i<=m;i++)
    {
        cin>>u[i],v[i];
        add(u[i],v[i]);
        add(v[i],u[i]);
    }
    for(int i=1;i<=n;i++)
        if(!dfn[i]) tarjan(i,-1);
    for(int i=1;i<=m;i++)
    {
        if(dcc[u[i]]!=dcc[v[i]])
        {
            deg[dcc[u[i]]]++;
            deg[dcc[v[i]]]++;
        }
    }
    for(int i=1;i<=cnt_dcc;i++)
        if(deg[i]==1) lef++;
    cout<<(lef+1)/2;
    return 0;
}

回复

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

正在加载回复...