日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

poj 3352

發(fā)布時間:2023/11/27 生活经验 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 poj 3352 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題意:一個連通的無向圖,求至少需要添加幾條邊,救能保證刪除任意一條邊,圖仍然是連通的。

?

思路:邊的雙連通圖。其實就是要求至少添加幾條邊,可以使整個圖成為一個邊雙連通圖。用tarjan算法(求割點割邊)求出low數(shù)組,這里可以簡化,然 后依據(jù)“l(fā)ow相同的點在一個邊連通分量中”,縮點之后構(gòu)造成樹(這里可以直接利用low[]數(shù)組,low[i]即為第i節(jié)點所在的連通分量的標號)。求 出樹中出度為1的節(jié)點數(shù)left,答案即為(leaf+1)/2。

代碼:

#include<iostream>
#include<fstream>
using namespace std;int n,m;struct e{int data;e *next;
};e edge[1001];int in[1001],dfn[1001],sta[1001],low[1001],scc[1001];
int top,index,sum;void tar(int s,int f){int i,j,k;low[s]=dfn[s]=++index;sta[++top]=s;e *p=edge[s].next;while(p){if(p->data==f){p=p->next;continue;}if(dfn[p->data]==0){tar(p->data,s);low[s]=min(low[s],low[p->data]);}elselow[s]=min(low[s],dfn[p->data]);p=p->next;}if(low[s]==dfn[s]){sum++;do{i=sta[top--];scc[i]=sum;}while(i!=s);}
}void solve(){int i,j,k;index=0;sum=0;memset(dfn,0,sizeof(dfn));memset(in,0,sizeof(in));for(i=1;i<=n;i++)if(dfn[i]==0)tar(i,0);for(i=1;i<=n;i++){e *p=edge[i].next;while(p){if(scc[p->data]!=scc[i]){in[scc[p->data]]++;in[scc[i]]++;}p=p->next;}}j=0;for(i=1;i<=sum;i++)if(in[i]==2)j++;cout<<(j+1)/2<<endl;}void read(){
//	ifstream cin("in.txt");int i,j,k,s,t;while(cin>>n>>m){for(i=1;i<=n;i++)edge[i].next=0;for(i=1;i<=m;i++){cin>>s>>t;e *p=new e;p->data=t;p->next=edge[s].next;edge[s].next=p;e *q=new e;q->data=s;q->next=edge[t].next;edge[t].next=q;}solve();}
}int main(){read();return 0;
}

轉(zhuǎn)載于:https://www.cnblogs.com/zhaozhe/archive/2011/05/17/2049207.html

總結(jié)

以上是生活随笔為你收集整理的poj 3352的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。