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

The Fourth Dimension Space

枯葉北風寒,忽然年以殘,念往昔,語默心酸。二十光陰無一物,韶光賤,寐難安; 不畏形影單,道途阻且慢,哪曲折,如渡飛湍。斬浪劈波酬壯志,同把酒,共言歡! -如夢令

ZOJ 2588-Burning Bridges(圖的連通性問題——求割邊)

今天想看看關于橋的求法,搜到了這樣一個題,由與網(wǎng)上缺少相關的資料,花了很多時間在找資料上,最后發(fā)現(xiàn)lrj的書上有這個問題的描述:
無向圖的割點和橋(見lrj書)

算法基于以下原理:(1)如果根頂點的兒子數(shù)大于1,則根頂點是割點(2)如果一個點和這個點的子孫都不存在指向這個點祖先的后向邊,則這個點為割點。實現(xiàn)時需要對每個結點記錄一個low值,表示該結點的子孫能夠到達的最小的深度,如果這個值小于或等于該點的深度,則該點為割點。如果

y是x的兒子并且y的low值大于x的深度,則邊(x,y)為圖的橋。

原來求割點和求割邊是同一回事,難怪網(wǎng)上只有割點的資料,割邊的幾乎沒有提及。具體的算法看lrj的書,這里說一下做題的心得。

主要是兩個方面:
1。題目中給出的圖是有重邊的,如何判斷重邊?這個問題很重要 根據(jù)題意,沒法確定重邊中的那一條邊會被燒掉,所以重邊一定不是我們想要的結果,要從求出的橋里面剔除。我想了比較長的時間,開矩陣吧,10000*10000的矩陣雖然定位是O(1)的,但是這么大的矩陣肯定爆。
所以只能用鄰接表。可鄰接表如何判重,難道線性掃描一遍?每一次加邊都要從表頭掃到表尾,然后才能實現(xiàn)插入,最壞的情況是0+1+2+3+...+m-1=O(m^2)。(當然這有點極端,畢竟n只有10000級別,是邊的十分之一)建立鄰接表的復雜度就有點。。。另外 20個case。。。
但是事實上,這道題我就是這么做的,鄰接表+內(nèi)存池,線性掃描判重,用的時間大約是時限的五分之一。。。可以接受。。。

2。這個題中給出的是無向邊,建鄰接表的時候正反都要建,但是一但正向被搜索過,方向就定了,DFS的過程實際就是將一個無向圖,轉(zhuǎn)換成一個有根的有向的深度優(yōu)先生成樹的過程。所以,每考察一個節(jié)點就要記錄下他的父親節(jié)點,不能將父子邊當成回邊,這個要特別注意。然后就是
low[ p->t ]> dfsn[k]
重邊的時候要特殊照顧,其余的就是標準的算法過程了。

另外要使用鄰接表的時候,不要用vector,效率實在太低,指針+內(nèi)存池才是王道!
//This is the source code for ZOJ 2588
//Coded By abilitytao
//2009年9月26日
#include<stdio.h>
#include
<string.h>
#include
<stdlib.h>

#define DOTMAX 10001
#define EDGEMAX 100001
#define min(a,b) ( (a)<(b)?(a):(b) )
int cmp(const void *a,const void *b)
{

    
return (*(int*)a)-(*(int*)b);
}

struct node
{
    
int t;
    
int index;
    
int num;
    node 
*next;
}
dotset[EDGEMAX*2];
node hash[DOTMAX];
int record[EDGEMAX];

int count=0;
node 
*Newnode()
{
    node 
*p;
    p
=&dotset[count];
    count
++;
    
return p;
}

void init(int n)
{
    
int i;
    
for(i=1;i<=n;i++)
    
{
        hash[i].next
=NULL;
        hash[i].t
=-1;
    }

}


void inputcase(int n,int m)
{
    
int flag;
    
int i;
    init(n);
    
int a,b;
    node 
*p;
    node 
*q;
    
for(i=1;i<=m;i++)
    
{
        flag
=0;
        scanf(
"%d%d",&a,&b);
        
for(p=&hash[a];p->next!=NULL;p=p->next)
        
{
            
            
if(p->t==b&&p->num==1)
            
{
                flag
=1;
                
break;
            }

            
else if(p->t==b&&p->num==0)
            
{
                flag
=1;
                p
->num+=1;
                
break;
            }

        }

        
if(flag==1)
            
continue;
        
while(p->next!=NULL)
        
{
            p
=p->next;
        }

        q
=Newnode();
        q
->t=b;
        q
->index=i;
        q
->num=0;
        q
->next=NULL;

        p
->next=q;
        
//////////////////////////////////////////////////////////////////////////

        p
=&hash[b];

        q
=Newnode();
        q
->index=i;
        q
->t=a;
        q
->num=0;

        q
->next=p->next;
        p
->next=q;
    }



}




int res=0;
void dfs( int father,int k,int s,int &cnt,node hash[],bool visit[],int dfsn[],int low[])
{
    
++cnt;
    dfsn[k]
= cnt, low[k]= cnt, visit[k]= true;
    
    
int num= 0;
    node 
*p;
    
for( p=hash[k].next ;p!=NULL; p=p->next )
    
{
        
if(p->t==father)
            
continue;
        
if!visit[ p->t ] )
        
{
            num
++;
            dfs(k,p
->t,s,cnt,hash,visit,dfsn,low );
            
            low[k]
= min( low[k], low[ p->t ] );
            
            
if( low[ p->t ]> dfsn[k] )  
            
{
                
if(p->num==0)
                
{
                    res
++;
                    record[res]
=p->index;
                }

            }

        }

        
else if(k!=p->t)
            low[k]
= min( low[k], dfsn[ p->t ] );
    }

}



int FindKeyPoint(node hash[],int s,int n)
{
    
    
int cnt=0;
    
bool visit[DOTMAX]={false};
    
int low[DOTMAX]={0};
    
int dfsn[DOTMAX]={0};
    dfs(
-1,s,s,cnt,hash,visit,dfsn,low);
    
return res;
}




int main()
{

    
int testcase;
    scanf(
"%d",&testcase);
    
int i,j;
    
int n,m;
    
int num;
    
for(i=1;i<=testcase;i++)
    
{
        res
=0;
        count
=0;
        scanf(
"%d%d",&n,&m);
        inputcase(n,m);
        num
=FindKeyPoint(hash,1,n);
        qsort(record
+1,num,sizeof(record[0]),cmp);
        printf(
"%d\n",num);
        j
=1;
        
for(j=1;j<num;j++)
        
{
            printf(
"%d ",record[j]);
        }

        
if(num!=0)
            printf(
"%d\n",record[j]);
        
if(i!=testcase)
            printf(
"\n");
    }

    
return 0;
}

posted on 2009-09-26 01:35 abilitytao 閱讀(1520) 評論(0)  編輯 收藏 引用


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


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            91久久精品网| 性欧美18~19sex高清播放| 欧美日韩美女在线| 久久综合影视| 国产精品社区| 99国产精品久久久久老师| 亚洲电影在线看| 午夜亚洲视频| 欧美国产先锋| 亚洲大胆人体视频| 久久久久一区| 久久综合图片| 日韩视频在线免费观看| 欧美激情久久久久| 久久久久久黄| 国产一区二区久久| 亚洲欧美在线磁力| 欧美一区二区视频网站| 国产精品中文字幕欧美| 亚洲欧美www| 久久超碰97中文字幕| 国产午夜一区二区三区| 欧美一区二区视频在线观看2020 | 亚洲日本中文字幕区| 久久夜色精品国产| 老鸭窝毛片一区二区三区| 亚洲第一精品电影| 国产精品久久久久天堂| 亚洲欧美日本日韩| 亚洲第一页自拍| 欧美成人一品| 亚洲日韩成人| 亚洲神马久久| 国产精品乱看| 欧美黄在线观看| 欧美在线视频全部完| 欧美不卡一卡二卡免费版| 91久久精品一区| 国产一区二区三区免费不卡| 欧美日本一区二区三区 | 猛男gaygay欧美视频| 亚洲大片免费看| 久久精品国产2020观看福利| 亚洲第一在线综合网站| 亚洲国产成人午夜在线一区 | 欧美国产另类| 性欧美精品高清| 99伊人成综合| 亚洲国产午夜| 日韩视频一区二区三区在线播放| 欧美高清视频一区| 久久久精品欧美丰满| 亚洲二区在线视频| 久久综合久久综合这里只有精品 | 日韩午夜在线电影| 激情文学综合丁香| 久热精品视频在线| 99re6热在线精品视频播放速度 | 亚洲电影免费观看高清| 久久久久久9| 欧美专区第一页| 午夜激情综合网| 1769国产精品| 影音先锋欧美精品| 欧美亚洲成人免费| 久久久久久久97| 欧美在线不卡视频| 久久经典综合| av成人福利| 99精品欧美一区二区蜜桃免费| 欧美韩日高清| 亚洲福利视频一区| 亚洲第一区在线观看| 欧美激情一区二区三区不卡| 欧美国产欧美亚州国产日韩mv天天看完整| 久久狠狠久久综合桃花| 久久精品国产99国产精品| 久久国产精品99久久久久久老狼| 久久爱另类一区二区小说| 欧美一区亚洲二区| 久久久久久久久久久成人| 久久全球大尺度高清视频| 亚洲一品av免费观看| 亚洲国产日韩美| 国模套图日韩精品一区二区| 欧美午夜免费影院| 国产精品免费视频观看| 国产精品一卡| 韩国精品主播一区二区在线观看| 国产精品a久久久久| 国产精品一区三区| 韩国av一区二区三区| 在线看一区二区| 一本大道久久精品懂色aⅴ| 亚洲电影免费观看高清完整版在线观看| 在线成人h网| 亚洲人精品午夜在线观看| 亚洲视频一区二区在线观看 | 亚洲美女免费精品视频在线观看| 一区二区三区久久网| 亚洲人成在线观看| 亚洲自拍偷拍色片视频| 久久久久久久久久码影片| 欧美激情亚洲视频| 国产伦精品一区二区三区照片91 | 欧美丝袜一区二区| 欧美日本韩国在线| 国产欧美69| 国产日韩av在线播放| 亚洲高清av| 亚洲伊人色欲综合网| 亚洲综合激情| 免费在线国产精品| 老司机一区二区| 9久re热视频在线精品| 欧美亚洲一区在线| 欧美精品一区二区精品网| 国产伦精品一区二区三区| 在线日韩中文字幕| 亚洲欧美日韩一区二区三区在线| 亚洲综合成人婷婷小说| 蜜臀va亚洲va欧美va天堂| 一道本一区二区| 久久综合婷婷| 国产欧美一区二区色老头| 亚洲精品影院| 鲁鲁狠狠狠7777一区二区| 一道本一区二区| 欧美成人第一页| 国产一区高清视频| 亚洲小说欧美另类社区| 欧美激情精品久久久久久大尺度| 亚洲欧美制服另类日韩| 欧美日韩国产一区二区三区地区| 国产精品v欧美精品v日本精品动漫| 国产在线拍偷自揄拍精品| 亚洲综合另类| 亚洲三级电影在线观看| 久久久精品动漫| 国产日韩精品在线播放| 亚洲免费在线播放| 亚洲精品在线一区二区| 亚洲男女自偷自拍图片另类| 欧美日韩播放| 亚洲欧洲综合另类| 欧美大学生性色视频| 亚洲免费激情| 欧美精品18+| 亚洲精品日韩精品| 欧美国产日本在线| 久久米奇亚洲| 在线观看三级视频欧美| 久久久91精品国产| 欧美一区二区三区四区夜夜大片| 国产精品mv在线观看| 亚洲性视频网址| av成人免费观看| 欧美日韩一区二区三区四区五区 | 亚洲综合电影一区二区三区| 亚洲激情视频在线观看| 亚洲午夜av在线| 麻豆乱码国产一区二区三区| 国内精品久久久久久久97牛牛| 欧美伊久线香蕉线新在线| 亚洲一区二区成人在线观看| 久久午夜精品| 亚洲国产精品一区二区第一页| 玖玖玖国产精品| 久久综合五月| 亚洲激情在线播放| 亚洲国产精品久久| 欧美日本在线观看| 亚洲影音一区| 香港久久久电影| 一区在线观看| 欧美夫妇交换俱乐部在线观看| 欧美成人dvd在线视频| 日韩网站在线| 一区二区三区欧美成人| 国产精品一区二区在线观看不卡 | 久久精品国产2020观看福利| 欧美有码在线观看视频| 在线日韩一区二区| 亚洲第一伊人| 欧美丝袜一区二区| 欧美一级欧美一级在线播放| 日韩视频在线观看国产| 国产精品国产亚洲精品看不卡15| 一区二区高清视频在线观看| 亚洲福利视频一区| 国产精品电影观看| 久久精品亚洲热| 欧美gay视频| 亚洲经典在线看| 中文精品视频| 国产精品www网站| 久久综合久色欧美综合狠狠| 欧美成人久久| 欧美亚洲视频在线看网址| 久热精品视频在线免费观看|