多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > HDU3394.Railway――點雙連通分量

HDU3394.Railway――點雙連通分量

來源:程序員人生   發布時間:2015-05-07 09:06:48 閱讀次數:3669次

http://acm.hdu.edu.cn/showproblem.php?pid=3394

題目描寫:
有1個公園有n個景點,公園的管理員準備修建m條道路,并且安排1些構成回路的參觀線路。如果1條道路被多條道路公用,那末這條路是沖突的;如果1條道路沒在任何1個回路內,那末這條路是不沖突的

問分別有多少條有沖突的路和沒有沖突的路

分析:
剛學點雙和邊雙,看見題目分不清哪一個是哪一個~

這個題目是求點雙的。某條邊有沖突,說明該點雙連通份量中存在兩個以上的環,沒有沖突說明這條邊是橋

怎樣判斷1個雙連通份量中環的個數呢?根據點數跟邊數的關系
1.當點數=邊數,構成1個環
2.當點數>邊數(1條線段,說明這條邊是橋)
3.當點數<邊數,那末就含1個以上的環了

//296MS 3624K 2190 B #include<cstring> #include<cstdio> #include<iostream> #define rep(i,n) for(int i=0;i<(n);++i) #define rep1(i,a,b) for(int i=(a);i<(b);++i) #define max(a,b) (a<b?b:a) const int MAXN=10010; const int MAXM=100010; using namespace std; int low[MAXN],dfn[MAXN],Stack[MAXN],bcc[MAXN]; int dfs_clock,top; bool ok[MAXN]; int tmp[MAXN],cc; int n,m; int ans1,ans2; struct Edge{ int to,next; }edge[MAXM<<1];int head[MAXN],tot; void addedge(int u,int v){ edge[tot].to=v;edge[tot].next=head[u];head[u]=tot++; } void init(){ tot=0; memset(head,0xff,sizeof(head)); } void count(){ int sum=0,u,v; for(int i=0;i<cc;++i){ u=tmp[i]; for(int j=head[u];j!=-1;j=edge[j].next){ v=edge[j].to; if(ok[v]) sum++; } } sum/=2; if(sum>cc) ans2+=sum; } void dfs(int u,int pre){ int v; low[u]=dfn[u]=++dfs_clock; Stack[top++]=u; for(int i=head[u];i!=-1;i=edge[i].next){ v=edge[i].to; if(v==pre) continue; if(!dfn[v]){ dfs(v,u); if(low[u]>low[v]) low[u]=low[v]; if(low[v]>dfn[u]) ans1++; if(low[v]>=dfn[u]){ cc=0; memset(ok,false,sizeof(ok)); int vn; for(;;){ vn=Stack[--top]; tmp[cc++]=vn; ok[vn]=true; if(vn==v) break; } tmp[cc++]=u; ok[u]=true; count(); } } else if(low[u]>dfn[v]) low[u]=dfn[v]; } } void solve(){ memset(dfn,0,sizeof(dfn)); dfs_clock=top=0; ans1=ans2=0; for(int i=0;i<n;++i){ if(!dfn[i]) dfs(i,-1); } printf("%d %d ",ans1,ans2); } int main() { #ifndef ONLINE_JUDGE freopen("in.cpp","r",stdin); #endif // ONLINE_JUDGE int u,v; while(scanf("%d%d",&n,&m)==2){ if(n==0&&m==0) break; init(); while(m--){ scanf("%d%d",&u,&v); addedge(u,v); addedge(v,u); } solve(); } return 0; }
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 久久网国产 | 在线欧美一级毛片免费观看 | 久久www成人看片 | 国产精品第一页在线观看 | 亚洲国产欧美国产第一区二区三区 | 自拍偷拍视频网站 | a天堂影院| 国产三级自拍视频 | 国产6080一级毛片 | 2022在线精品视频网站 | 在线黄色免费网站 | 噜噜影院无毒不卡 | 国产精品一区二区三区久久 | 中文字幕yellow在线资源 | 欧美一区二区影院 | jizz中国人| 午夜理伦三级在线观看 | 免费的黄色的网站 | 亚洲精品国产一区二区三 | 成人自拍网| 欧美高清3dfreexxxx性 | 男人天堂亚洲色图 | 亚洲区小说区 | 三级视频网 | 在线精品福利 | 亚洲精品一区久久狠狠欧美 | 2022av视频| 久久青娱乐 | 色阁在线| www.操操| h视频免费看 | 在线观看三级视频 | 亚洲天堂免费在线视频 | 午夜伊人| 国产福利片在线 易阳 | 中文字幕无线精品乱码一区 | 一区二区三区欧美 | 欧美做受 | 日韩欧美国产亚洲 | 欧美精品免费一区欧美久久优播 | 成人免费淫片免费观看 |