UVALive 5135 Mining Your Own Business

來源:互聯網
上載者:User

標籤:uva   圖論   

題意:

一些隧道組成礦井  現在要修建盡量少的逃生通道  使得無論哪裡發生事故  所有人均能逃出  求方案數

思路:

這道題比較容易聯想到割點  因為只有這種點出事礦井才會不連通  那麼首先就找出所有割點

分析最少要建幾個逃生通道  那當然是每個連通塊各一個  因此需要把求出連通塊頂點數之積

最後考慮特殊情況  沒有割點  那麼隨便兩個地方建就好了  不能建一個  萬一就那裡出事了呢…

代碼:

#include<cstdio>#include<cstring>#include<algorithm>#include<set>using namespace std;#define N 50010typedef long long LL;int m,n,tot,t,ans1,res,idx;int head[N],dfn[N],low[N],cut[N],vis[N];struct edge{    int v,flag,next;}ed[N*2];LL ans2;set<int> next;void add(int u,int v){    ed[tot].v=v; ed[tot].flag=0; ed[tot].next=head[u]; head[u]=tot++;}void tarjan(int u,int fa){int i,v,son=0;dfn[u]=low[u]=++idx;for(i=head[u];~i;i=ed[i].next){v=ed[i].v;if(ed[i].flag||dfn[v]>=dfn[u]) continue;ed[i].flag=ed[i^1].flag=1;if(dfn[v]==-1){son++;tarjan(v,u);low[u]=min(low[u],low[v]);if(u!=fa&&dfn[u]<=low[v]) cut[u]=1;}else low[u]=min(low[u],dfn[v]);}if(u==fa&&son>1) cut[u]=1;}void dfs(int u){    int i,v;    res++;    vis[u]=1;    for(i=head[u];~i;i=ed[i].next)    {        v=ed[i].v;        if(cut[v]) next.insert(v);        if(!cut[v]&&!vis[v]) dfs(v);    }}int main(){int i,u,v;while(~scanf("%d",&m)){    if(!m) break;    tot=n=idx=0;    memset(head,-1,sizeof(head));    memset(dfn,-1,sizeof(dfn));    memset(cut,0,sizeof(cut));    memset(vis,0,sizeof(vis));    for(i=1;i<=m;i++)        {            scanf("%d%d",&u,&v);            n=max(n,u);            n=max(n,v);            add(u,v);            add(v,u);        }tarjan(1,1);ans1=0;ans2=1;for(i=1;i<=n;i++)        {            if(!cut[i]&&!vis[i])            {                res=0;                next.clear();                dfs(i);                if(next.size()==1)                {                    ans1++;                    ans2*=res;                }            }        }        if(ans1==0)        {            ans1=2;            ans2=(LL)(n)*(n-1)/2;        }        printf("Case %d: ",++t);printf("%d %lld\n",ans1,ans2);}return 0;}


UVALive 5135 Mining Your Own Business

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.