• poj 3352 Road Construction


    // 只能说这题和上题一模一样
    // 我就直接贴上题代码了、、

    #include <iostream> #include <algorithm> #include <queue> #include <stack> #include <math.h> #include <stdio.h> #include <string.h> using namespace std; #define MOD 1000000007 #define maxn 20100 #define maxm 5010 struct Edge{ int to; int num; int next; Edge(){}; Edge(int u,int v){to=u;next=v;} }E[maxn]; int V[maxm],num; int pre[maxm]; int dfst,bcc; int belong[maxm]; bool tag[maxn]; void init(int n){ dfst=0; num=0; bcc=0; for(int i=1;i<=n;i++){ V[i]=-1; pre[i]=0; belong[i]=0; } } void add(int u,int v,int m){ E[num].to=v; E[num].num=m; E[num].next=V[u]; V[u]=num++; E[num].to=u; E[num].num=m; E[num].next=V[v]; V[v]=num++; } int dfs(int u,int fa){ int lowu; lowu=pre[u]=++dfst; int v,e; for(e=V[u];e!=-1;e=E[e].next){ v=E[e].to; if(!pre[v]){ int lowv=dfs(v,u); lowu=min(lowu,lowv); if(lowv>pre[u]){ tag[E[e].num]=1; } } else if(v!=fa) lowu=min(lowu,pre[v]); } return lowu; } void dfsbcc(int u){ belong[u]=bcc; int v,e; for(e=V[u];e!=-1;e=E[e].next){ if(tag[E[e].num]) continue; v=E[e].to; if(!belong[v]){ dfsbcc(v); } } } int rc[maxn][2],in[maxm]; int main() { int F,R; int u,v; int i,j; while(scanf("%d %d",&F,&R)!=EOF){ init(F); for(i=1;i<=R;i++){ scanf("%d %d",&u,&v); rc[i][0]=u;rc[i][1]=v; add(u,v,i); tag[i]=0; } dfs(1,0); for(i=1;i<=F;i++) if(!belong[i]){ bcc++; dfsbcc(i); } for(i=1;i<=bcc;i++) in[i]=0; for(i=1;i<=R;i++) { u=belong[rc[i][0]]; v=belong[rc[i][1]]; if(u!=v){ in[u]++; in[v]++; } } int ans=0; for(i=1;i<=bcc;i++) if(in[i]==1) ans++; printf("%d ",(ans+1)/2); } return 0; }
  • 相关阅读:
    P4141 消失之物(退背包模板)
    P5829 【模板】失配树
    P4827 [国家集训队] Crash 的文明世界
    P4074 [WC2013]糖果公园
    P3242 [HNOI2015]接水果
    P2371 [国家集训队]墨墨的等式
    P4819 [中山市选]杀人游戏
    P5331 [SNOI2019]通信
    BZOJ1082 [SCOI2005]栅栏
    poj1475 Pushing Boxes[双重BFS(毒瘤搜索题)]
  • 原文地址:https://www.cnblogs.com/372465774y/p/3204726.html
Copyright © 2020-2023  润新知