青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 5,  comments - 5,  trackbacks - 0
     把自己原來(lái)做過(guò)的幾道感覺(jué)不錯(cuò)的圖論題貼過(guò)來(lái)。
     
[無(wú)向圖點(diǎn)雙][POJ2942]Knights of the Round Table

題目大意:有N個(gè)騎士,給出有兩兩之間有仇恨的關(guān)系,要求安排一種環(huán)形座次使得總?cè)藬?shù)為奇數(shù)而且其實(shí)之間不會(huì)發(fā)生沖突。

    題解:首先根據(jù)給出的關(guān)系可以確定兩兩之間沒(méi)有仇恨的關(guān)系,然后根據(jù)該關(guān)系構(gòu)建圖。容易知道,最后安排的人必定在同一個(gè)點(diǎn)雙連通分量當(dāng)中(否則不會(huì)形成環(huán))。然后要在每個(gè)點(diǎn)雙當(dāng)中尋找一個(gè)奇圈。直接給出兩個(gè)霸氣的定理:1.如果一個(gè)點(diǎn)雙連通分量中存在奇圈,那么整個(gè)點(diǎn)雙連通分量的所有點(diǎn)必定也在一個(gè)奇圈中。

2.一個(gè)點(diǎn)雙連通分量如果不是二分圖則一定包含奇圈


  1#include <iostream>
  2#include <cstdio>
  3#include <algorithm>
  4#include <vector>
  5#include <stack>
  6using namespace std;
  7int N,M;
  8bool discnt[1005][1005],Stay[1005];
  9vector<int> adj[1005];
 10int Color,Time,dfn[1005],low[1005],color[1005],bw[1005],Ans;
 11stack< pair<int,int> > Stack;
 12
 13bool isDiv(int u,int _bw){
 14    bw[u]=_bw;
 15    int i,node;
 16    for(i=0;i<adj[u].size();i++){
 17        node=adj[u][i];
 18        if(color[node]==Color){
 19            if(bw[node]==-1){
 20                if(!isDiv(node,!_bw))    return false;
 21            }

 22            else if(bw[node]==_bw) return false;
 23        }

 24    }

 25    return true;
 26}

 27
 28void dfs(int u,int fa){
 29    int i,j,node;
 30    dfn[u]=low[u]=++Time;
 31    for(i=0;i<adj[u].size();i++){
 32        node=adj[u][i];
 33        if(!dfn[node]){
 34            Stack.push(make_pair(u,node));
 35            dfs(node,u);
 36            low[u]=min(low[u],low[node]);
 37            if(low[node]>=dfn[u]){
 38                ++Color;
 39                pair<int,int> edge_1=make_pair(node,u);
 40                pair<int,int> edge_2=make_pair(u,node);
 41                while(Stack.top()!=edge_1&&Stack.top()!=edge_2&&!Stack.empty()){
 42                    color[Stack.top().first]=color[Stack.top().second]=Color;
 43                    Stack.pop();
 44                }

 45                color[Stack.top().first]=color[Stack.top().second]=Color;
 46                Stack.pop();
 47                memset(bw,-1,sizeof(bw));
 48                if(!isDiv(u,1)){
 49                    for(j=1;j<=N;j++){
 50                        if(color[j]==Color){
 51                            Stay[j]=true;
 52                        }

 53                    }

 54                }

 55            }

 56        }

 57        else if(node!=fa){
 58
 59            low[u]=min(low[u],dfn[node]);
 60        }

 61    }

 62}

 63            
 64
 65int main(){
 66
 67    while(scanf("%d%d",&N,&M)!=EOF){
 68        if(N+M==0break;
 69        int i,j,a,b;
 70        for(i=1;i<=N;i++)   adj[i].clear();
 71        memset(discnt,false,sizeof(discnt));
 72        for(i=1;i<=M;i++){
 73            scanf("%d%d",&a,&b);
 74            discnt[a][b]=discnt[b][a]=true;
 75        }

 76        for(i=1;i<=N;i++){
 77            for(j=1;j<=N;j++){
 78                if(i==j)    continue;
 79                if(!discnt[i][j]){
 80                    adj[i].push_back(j);
 81                }

 82            }

 83        }

 84        memset(dfn,0,sizeof(dfn));
 85        memset(low,0,sizeof(low));
 86       
 87        memset(Stay,0,sizeof(Stay));
 88        memset(color,0,sizeof(color));
 89        Stack=stack< pair<int,int> >();
 90        Color=0;
 91        for(i=1;i<=N;i++){
 92            if(!dfn[i]){
 93                Time=0;
 94                dfs(i,0);
 95            }

 96        }

 97        Ans=N;
 98        for(i=1;i<=N;i++)   if(Stay[i]) Ans--;
 99        printf("%d\n",Ans);
100    }

101    return 0;
102}


校賽時(shí)的I題,Special Fish

困惑的地方:比賽時(shí)候我們想到KM,然后想起一句話,KM只能做完備匹配,于是沒(méi)有寫。后來(lái)發(fā)現(xiàn)大家都是直接一遍KM就過(guò)了,回來(lái)我寫成費(fèi)用流發(fā)現(xiàn)不行。答案不應(yīng)該是最后的cost而應(yīng)該是 Max(cost),然后被tclsm大牛質(zhì)疑了,于是有如下討論研究:

   關(guān)鍵點(diǎn):這個(gè)圖不是完備匹配。

   1)為什么KM可以直接做就AC了?KM做出來(lái)不是完備匹配么?NO!KM做出來(lái)還是完備匹配,不過(guò)對(duì)于非完備的用邊權(quán)為0的邊代替了。那么去掉這些邊權(quán)為0的邊可以么?答案是不可以,見(jiàn)下文

   2)用費(fèi)用流做:

   對(duì)于每個(gè)點(diǎn)i,我拆成了i和i'然后用了兩種方式建圖
1.s-> all i cost =0 cap=1
   all i'->t cost =0 cap=1
   所有i可以攻擊j的 i->j' cost=-(vali^valj) cap=1
   做費(fèi)用流,wa掉,部分比答案小
2.s-> all i cost =0 cap=1
   all i'->t cost =0 cap=1
   所有i可以攻擊j的 i->j' cost=vali^valj cap=1
   所有i不可以攻擊j的 i->j' cost=0 cap=1
   做費(fèi)用流 AC

為什么會(huì)出現(xiàn)這種問(wèn)題?由于我們做的是最小費(fèi)用最大流,所以前提條件是流量最大,之后費(fèi)用最小。于是這個(gè)題的關(guān)鍵點(diǎn)終于出來(lái)了--最小費(fèi)用的情況下是不是保證最大流?直觀的看貌似是的,因?yàn)槿绻钚≠M(fèi)用的情況不是最大流的話,那么由于費(fèi)用都是負(fù)數(shù),可以再找一條增廣路來(lái)減小費(fèi)用。直接看這個(gè)好像沒(méi)有什么問(wèn)題,而且之前和zz討論他也以這個(gè)為論點(diǎn)。但是在說(shuō)這句話的時(shí)候忘記了一個(gè)很重要的問(wèn)題--后向邊!!!從后向邊走費(fèi)用一定是負(fù)數(shù)么?No!所以這么下來(lái)未必會(huì)減少費(fèi)用而最后cost也未必是答案。

改進(jìn)方法:1.使用模型2是的原圖可以達(dá)到最大流 2.取Max (cost)

 

感謝tclsm大牛的指點(diǎn),感謝好友zz的討論~


POJ 3177 邊雙連通分量
題目大意:給一個(gè)無(wú)向圖,求最少添加多少條邊可以使得任意兩個(gè)頂點(diǎn)間至少有兩條不相交的路徑。

    題解:如果存在兩個(gè)頂點(diǎn),他們之間只有一條路徑或者所有路徑相交,那么必定有橋。所以對(duì)于原圖收縮邊雙連通分量,然后形成一棵樹(shù),答案就是樹(shù)中(葉子節(jié)點(diǎn)個(gè)數(shù)+1)/2 (正確性:不會(huì)嚴(yán)格證明,畫(huà)個(gè)圖葉子之間兩兩連一下感覺(jué)沒(méi)問(wèn)題...)


 1#include <iostream>
 2#include <vector>
 3using namespace std;
 4int t,f,r,dfn[5001],low[5001],bic[5001],color,indo[5001],ans;
 5bool brige[5001][5001];
 6vector<int> adj[5001];
 7vector< pair<int,int> > Brige;
 8
 9void dfs(int u,int v){
10    dfn[u]=low[u]=++t;
11    int node;
12    for(int i=0;i<adj[u].size();i++){
13        node=adj[u][i];
14        if(!dfn[node]){
15            dfs(node,u);
16            low[u]=min(low[u],low[node]);
17            if(low[node]>dfn[u]){
18                brige[node][u]=brige[u][node]=true;
19                Brige.push_back(make_pair(u,node));
20            }

21        }

22        else if(node!=v){
23            low[u]=min(low[u],dfn[node]);
24        }

25    }

26}

27
28void floodfill(int u){
29    bic[u]=color;
30    int node;
31    for(int i=0;i<adj[u].size();i++){
32        node=adj[u][i];
33        if(!bic[node]&&!brige[u][node]){
34            floodfill(node);
35        }

36    }

37}

38            
39
40int main(){
41    scanf("%d%d",&f,&r);
42    int i,j,a,b;
43    for(i=1;i<=r;i++){
44        scanf("%d%d",&a,&b);
45        adj[a].push_back(b);
46        adj[b].push_back(a);
47    }

48    dfs(1,0);
49    for(i=1;i<=f;i++){
50        if(!bic[i]){
51            ++color;
52            floodfill(i);
53        }

54    }

55    for(i=0;i<Brige.size();i++){
56        indo[bic[Brige[i].first]]++;
57        indo[bic[Brige[i].second]]++;
58    }

59    for(i=1;i<=color;i++){
60        if(indo[i]==1) ans++;
61    }

62    printf("%d\n",(ans+1)/2);
63    return 0;
64}

posted on 2010-08-01 19:55 OpenWings 閱讀(345) 評(píng)論(0)  編輯 收藏 引用

只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


<2025年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

常用鏈接

留言簿(1)

隨筆分類

隨筆檔案

隊(duì)員

最新評(píng)論

  • 1.?re: 杭州G題的代碼
  • @此最相思
    271763295,最近事情有點(diǎn)多回復(fù)晚了不好意思
  • --fatboy_cw
  • 2.?re: 杭州G題的代碼
  • 您有QQ么 在線請(qǐng)教一下 您的代碼我好幾個(gè)沒(méi)看懂...
  • --此最相思
  • 3.?re: 杭州G題的代碼
  • @OpenWings
    這題是不是求經(jīng)過(guò)幾個(gè)連通分量?
  • --此最相思
  • 4.?re: 杭州G題的代碼
  • @此最相思
    對(duì)無(wú)向圖收縮點(diǎn)雙連通分量以后,把每個(gè)分量連接到對(duì)應(yīng)割點(diǎn)上,對(duì)于詢問(wèn)用tarjan處理lca(rmq貌似還得加個(gè)虛根),然后用距離除2即可。
  • --OpenWings
  • 5.?re: 杭州G題的代碼
  • 縮點(diǎn)以后怎么處理 能說(shuō)的詳細(xì)些么? 希望能舉個(gè)具體例子說(shuō)說(shuō) 謝謝
  • --此最相思

閱讀排行榜

評(píng)論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲天堂av在线免费| 中文av字幕一区| 1024国产精品| 欧美日韩在线一区| 久久久人人人| 欧美在线观看视频在线 | 欧美精品99| 欧美精品麻豆| 国产精品久久久久久久久久妞妞 | 欧美日韩中文字幕精品| 免费日韩av| 欧美日韩在线播放三区四区| 欧美日韩少妇| 国产伦精品一区二区三区| 国产精品视频一区二区高潮| 国内精品视频在线观看| 亚洲激情视频在线播放| 亚洲一区精品电影| 久久成人精品视频| 99在线视频精品| 亚洲精品国产精品乱码不99| 夜夜精品视频| 亚洲网站啪啪| 噜噜噜在线观看免费视频日韩| 久久久xxx| 艳女tv在线观看国产一区| 性欧美长视频| 欧美日韩在线视频一区| 国产精品久久久久久福利一牛影视| 国产精品永久免费在线| 亚洲精品一区在线观看| 欧美在线网址| 亚洲一区二区三区欧美 | 欧美伊人久久久久久午夜久久久久 | 国内久久婷婷综合| 亚洲免费成人| 久久久久久亚洲精品杨幂换脸| 亚洲黄色免费电影| 久久久夜夜夜| 亚洲激情一区| 欧美国产日韩精品免费观看| 久久成人精品视频| 极品中文字幕一区| 久久久久久婷| 欧美在线视频免费播放| 国产九九精品视频| 久久精品中文字幕免费mv| 亚洲午夜av电影| 国产亚洲精品激情久久| 久久噜噜噜精品国产亚洲综合| 亚洲欧美国产另类| 国产一区二区日韩精品| 久久午夜精品一区二区| 久久精品国产一区二区三区免费看| 国产美女精品人人做人人爽| 午夜精品久久久久久| 久久精品国产91精品亚洲| 在线观看视频亚洲| 日韩视频免费在线| 国产一区日韩一区| 亚洲激情在线播放| 国产亚洲aⅴaaaaaa毛片| 欧美va天堂va视频va在线| 欧美日韩国产欧| 久久久精品动漫| 亚洲欧美色一区| 国产精品网站在线播放| 巨乳诱惑日韩免费av| 欧美视频免费在线| 亚洲第一福利在线观看| 久久性天堂网| 国内精品久久久久影院 日本资源| 久久亚洲美女| 欧美视频一区二区三区在线观看| 久久综合福利| 在线国产精品一区| 久久夜色撩人精品| 久久综合电影一区| 久久久伊人欧美| 日韩视频一区二区三区在线播放| 国产精品久久久久一区二区三区| 久久xxxx精品视频| 国产在线精品成人一区二区三区| 夜夜精品视频| 新片速递亚洲合集欧美合集| 欧美日韩成人在线播放| 亚洲高清一二三区| 亚洲精品国产精品国自产观看| 久久先锋影音av| 蜜桃av一区| 国产精品99久久久久久宅男| 欧美久久99| 欧美一区二区三区免费观看| 久久久国产一区二区三区| 亚洲日韩欧美视频| 欧美日韩小视频| 欧美一乱一性一交一视频| 久久综合九色综合网站| 尤物99国产成人精品视频| 免费久久99精品国产| 一本一本a久久| 麻豆成人在线观看| 一区二区不卡在线视频 午夜欧美不卡在 | 国产欧美日韩在线播放| 久久国产精品久久精品国产| 欧美国产成人在线| 欧美在线播放一区| 亚洲视频999| 日韩亚洲欧美在线观看| 精品99视频| 国产主播精品| 狠狠色噜噜狠狠狠狠色吗综合| 欧美日韩大陆在线| 欧美全黄视频| 欧美日本高清| 欧美激情bt| 欧美日韩国产美女| 欧美日韩国产在线播放网站| 开元免费观看欧美电视剧网站| 亚洲免费网站| 午夜综合激情| 久久视频精品在线| 免费高清在线视频一区·| 久久av二区| 老鸭窝毛片一区二区三区 | 免费视频久久| 蜜臀91精品一区二区三区| 久久米奇亚洲| 亚洲高清成人| 亚洲欧美日韩国产中文| 久久国产精品黑丝| 欧美韩日一区二区| 欧美色图五月天| 国产欧美不卡| 亚洲韩日在线| 久久在线视频在线| 免费看的黄色欧美网站| 最新高清无码专区| 午夜国产欧美理论在线播放| 一区二区三区精品在线| 欧美一级免费视频| 欧美日韩国产黄| 亚洲一区二区黄色| 久久精品在线观看| 99热免费精品在线观看| 在线视频亚洲一区| 亚洲国产精品久久久久| 亚洲摸下面视频| 亚洲国产日韩欧美一区二区三区| 亚洲精品日韩激情在线电影 | 久久看片网站| 一本色道久久精品| 一本色道88久久加勒比精品 | 午夜精品影院在线观看| 国产精品网站在线播放| 免费观看30秒视频久久| 国产女人水真多18毛片18精品视频| 久久手机精品视频| 欧美日韩国产成人精品| 欧美激情亚洲| 激情婷婷欧美| 久久精品91久久香蕉加勒比| 亚洲自拍偷拍视频| 欧美视频手机在线| 亚洲美女av在线播放| 亚洲日韩中文字幕在线播放| 狂野欧美一区| 亚洲国产精品久久久久| 国内外成人免费激情在线视频网站 | 久久精品国产亚洲一区二区| 久久精品国产91精品亚洲| 国产精品第一区| 亚洲永久网站| 欧美在线首页| 狠狠色综合网| 久久人人九九| 亚洲激情在线播放| 欧美日韩一区二区三区在线| 国产精品99久久不卡二区| 久久九九有精品国产23| 一区二区三区在线视频播放| 欧美高清视频| 先锋a资源在线看亚洲| 久久另类ts人妖一区二区| 亚洲精选在线| 国产精品一区久久久久| 葵司免费一区二区三区四区五区| 欧美国产亚洲另类动漫| 欧美一区成人| 99视频日韩| 国产一区二区三区高清播放| 欧美久久一级| 久久精品1区| 欧美一区二区三区免费在线看| 亚洲国产精品日韩| 久久蜜桃资源一区二区老牛 | 亚洲视频电影图片偷拍一区| 久久亚洲欧美国产精品乐播| 亚洲一二三区视频在线观看| 影音国产精品|