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

The Fourth Dimension Space

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

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

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

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

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

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

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

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

另外要使用鄰接表的時候,不要用vector,效率實在太低,指針+內存池才是王道!
//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)  編輯 收藏 引用


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   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>
            亚洲欧洲在线视频| 亚洲影院在线观看| 欧美承认网站| 一区二区日韩| 在线一区日本视频| 国产欧美一区二区视频| 久久久美女艺术照精彩视频福利播放 | 日韩亚洲精品电影| 欧美色网在线| 欧美一级网站| 久久精品一区二区三区四区| 一色屋精品视频在线看| 亚洲高清视频一区| 国产精品v欧美精品v日本精品动漫| 午夜精品久久久久久99热软件| 欧美一级专区免费大片| 亚洲激情一区| 亚洲伊人伊色伊影伊综合网| 在线电影一区| 在线一区亚洲| 亚洲国产精品成人精品| 在线中文字幕日韩| 亚洲国产毛片完整版| 夜夜精品视频| 亚洲国产精品第一区二区三区| 日韩一级精品视频在线观看| 黄色一区二区在线观看| 99在线精品视频在线观看| 国内精品视频在线观看| 99国产精品视频免费观看| 国产在线精品一区二区夜色| 亚洲精品国产拍免费91在线| 国产亚洲一区二区在线观看| 亚洲精品色婷婷福利天堂| 黄色亚洲在线| 亚洲在线观看视频网站| 亚洲精品免费在线| 久久av一区二区三区亚洲| 中文日韩电影网站| 蜜桃av噜噜一区| 久久精品视频一| 国产精品福利久久久| 欧美激情中文不卡| 精品成人一区| 欧美一级理论性理论a| 亚洲尤物在线| 欧美精品在线免费| 欧美a级在线| 韩国自拍一区| 欧美中文日韩| 久久精品人人做人人综合| 欧美日韩另类国产亚洲欧美一级| 欧美国产欧美亚洲国产日韩mv天天看完整| 国产欧美日韩一区二区三区在线观看 | 久久福利影视| 亚洲欧美文学| 国产精品捆绑调教| 99视频精品| 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | 亚洲综合三区| 中文国产一区| 欧美日韩一区免费| 日韩视频专区| 亚洲男人影院| 国产日韩成人精品| 久久av二区| 久久久中精品2020中文| 国产综合香蕉五月婷在线| 欧美一区二区三区另类| 欧美综合77777色婷婷| 国产欧美日韩免费| 性视频1819p久久| 久久免费视频网站| 亚洲大胆在线| 欧美精品在线一区二区三区| 亚洲另类在线一区| 欧美一级片一区| 韩国欧美国产1区| 蜜桃久久av一区| 亚洲区一区二区三区| 日韩视频欧美视频| 欧美日韩美女在线观看| 亚洲一区制服诱惑| 久久综合狠狠| 亚洲精品少妇| 国产精品成人免费| 欧美一区二区三区日韩| 欧美国产精品va在线观看| 日韩一级免费| 国产精品自拍视频| 美乳少妇欧美精品| 这里只有精品电影| 麻豆精品一区二区综合av| 91久久精品国产91久久性色tv| 欧美日韩国产不卡| 久久狠狠亚洲综合| 亚洲精选一区二区| 久久精品国产清高在天天线 | 性做久久久久久免费观看欧美 | 在线观看日韩精品| 欧美精品免费看| 午夜精品福利视频| 欧美激情影院| 欧美一区二区三区的| 亚洲激情第一页| 国产精品美女午夜av| 免费看的黄色欧美网站| 亚洲性图久久| 最新中文字幕亚洲| 久久精品国产免费| 在线中文字幕日韩| 在线看日韩欧美| 国产精品乱码久久久久久| 免费欧美在线视频| 欧美一级视频精品观看| 亚洲黄一区二区三区| 久久字幕精品一区| 欧美一区影院| 亚洲视频免费看| 亚洲高清视频的网址| 国产尤物精品| 国产精品久久亚洲7777| 欧美精品三级在线观看| 久热精品视频在线观看| 欧美在线视频导航| 亚洲欧美综合国产精品一区| 亚洲美女淫视频| 亚洲国产精品嫩草影院| 麻豆av福利av久久av| 欧美资源在线| 欧美一区午夜精品| 午夜一区在线| 亚洲综合日韩在线| 亚洲伊人一本大道中文字幕| 一本色道久久综合| 99这里只有精品| 亚洲狼人综合| 99xxxx成人网| 妖精视频成人观看www| 亚洲精品韩国| 亚洲精品小视频| 亚洲七七久久综合桃花剧情介绍| 亚洲福利视频一区| 亚洲国产另类久久久精品极度 | 久久精品日产第一区二区| 亚洲一区日韩在线| 亚洲一区精彩视频| 亚洲一区二区三区中文字幕 | 亚洲一区久久| 亚洲欧美在线另类| 欧美一级大片在线观看| 欧美一区二区三区男人的天堂 | 国产精品美女久久福利网站| 欧美三级电影一区| 国产精品高清一区二区三区| 国产精品高潮呻吟| 国产午夜精品视频免费不卡69堂| 国产欧美日韩三级| 在线不卡a资源高清| 亚洲人成网站在线观看播放| 9久草视频在线视频精品| 亚洲午夜精品在线| 欧美中文字幕久久| 另类尿喷潮videofree| 欧美不卡一卡二卡免费版| 亚洲黄色免费电影| 亚洲天堂av在线免费观看| 亚洲欧美激情视频| 久久亚洲欧洲| 欧美日韩精品在线视频| 国产日产欧产精品推荐色| 亚洲第一色中文字幕| 亚洲视频第一页| 久久久久青草大香线综合精品| 欧美大色视频| 亚洲视频国产视频| 老司机精品视频网站| 欧美体内she精视频在线观看| 国内精品久久久久久久果冻传媒| 日韩午夜精品| 久久国产精品黑丝| 亚洲久久在线| 欧美在线三区| 欧美日韩免费观看中文| 韩国精品久久久999| 亚洲视频免费| 欧美成人精品激情在线观看| 制服诱惑一区二区| 免费中文日韩| 国产亚洲一区二区三区| 一本久久青青| 欧美电影电视剧在线观看| 亚洲一区国产一区| 欧美全黄视频| 亚洲福利视频网站| 久久久久成人精品| 亚洲一区二区三区精品视频| 欧美成人免费在线视频| 精品999在线播放| 欧美一区二区在线观看|