• <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>

            The Fourth Dimension Space

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

            POJ 2455 Secret Milking Machine(二分+網(wǎng)絡(luò)流)

            題意:n個(gè)點(diǎn)的一個(gè)無向圖,在保證存在t條從1到n的不重復(fù)路徑(任意一條邊都不能重復(fù))的前提下,要使得這t條路徑上的最大的那條邊最小。
            解法:二分t條路徑上的最大邊權(quán),對(duì)原圖的每一條邊如果其<=mid,添加一條容量是1的邊(正反都加上),然后跑一遍最大流,如果流量>=t,說明可以安排。迭代得最小值即可。

            PS:我一直以為無向圖不能拆成2條相反邊的,但是這個(gè)題用這個(gè)做法卻AC了。由于被那道two shortest題目影響,我覺得是不是也要先求出最短路徑樹然后把dis[i]+w[i][j]>=dis[j]的邊建起來,把無向邊轉(zhuǎn)化成有向邊來做,但是這樣卻wa了,不知道為什么。也許這個(gè)題恰好能拆邊吧。
            PSS:這題卡sap,用dinic才過掉

            int mat[maxn][maxn];
            int n,m,t;

            struct node2{
                
            int a,b,c;
            }
            ee[40010];

            void input()
            {

                
            //scanf("%d%d%d",&n,&m,&t);
                /*
                for(int i=0;i<n;i++)
                    for(int j=0;j<n;j++)
                    {

                        if(i==j)mat[i][j]=0;
                        else mat[i][j]=INF;
                    }
                    
            */

                
            for(int i=0;i<m;i++)
                
            {
                    
            int a,b,c;
                    scanf(
            "%d%d%d",&a,&b,&c);
                    a
            --;b--;
                    ee[i].a
            =a;ee[i].b=b;ee[i].c=c;
                
            /*    if(c<mat[a][b])
                        mat[a][b]=mat[b][a]=c;
                        
            */

                }

            }


            /*
            int dis[maxn];
            int use[maxn];
            void SPFA(int n,int s)
            {

                fill(dis,dis+n,INF);
                fill(use,use+n,0);
                dis[s]=0;
                use[s]=1;
                queue<int>Q;
                Q.push(s);
                while(!Q.empty())
                {

                    int x=Q.front();Q.pop();
                    use[x]=0;
                    for(int i=0;i<n;i++)
                    {

                        if(dis[x]+mat[x][i]<dis[i])
                        {
                            dis[i]=dis[x]+mat[x][i];
                            if(!use[i])
                            {
                                use[i]=1;
                                Q.push(i);
                            }
                        }
                    }
                }
            }
            */


            bool check(int mid)
            {

                
            for(int i=0;i<n;i++)
                    adj[i]
            =NULL;
                len
            =0;
                
            for(int i=0;i<m;i++)
                
            {
                    
            int a=ee[i].a;
                    
            int b=ee[i].b;
                    
            /*
                    if(dis[a]+ee[i].c>=dis[b]&&ee[i].c<=mid)
                        insert(a,b,1);
                    else if(dis[b]+ee[i].c>=dis[a]&&ee[i].c<=mid)
                        insert(b,a,1);
                        
            */

                    
            if(ee[i].c<=mid)
                    
            {
                        insert(a,b,
            1);
                        insert(b,a,
            1);
                    }

                }

                
            return dinic(n,0,n-1)>=t;
            }


            int main()
            {
                scanf(
            "%d%d%d",&n,&m,&t);
                
                    input();
                    
            //SPFA(n,0);
                    int l=0;
                    
            int r=1000000;
                    
            int ans=-1;
                    
            while(l<=r)
                    
            {
                        
            int mid=(l+r)>>1;
                        
            if(check(mid))
                        
            {
                            ans
            =mid;
                            r
            =mid-1;
                        }

                        
            else
                            l
            =mid+1;
                    }

                    printf(
            "%d\n",ans);

                

                
            return 0;


            }

            posted on 2010-11-06 23:20 abilitytao 閱讀(1335) 評(píng)論(0)  編輯 收藏 引用


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


            情人伊人久久综合亚洲| 久久精品国产91久久麻豆自制| 91精品国产高清91久久久久久| 99久久99久久精品国产片果冻| 久久九色综合九色99伊人| AAA级久久久精品无码区| 久久精品毛片免费观看| 久久婷婷国产综合精品| 亚洲AV无码1区2区久久| 亚洲AV日韩精品久久久久久| 亚洲精品乱码久久久久久久久久久久 | 久久成人影院精品777| 国产精品久久午夜夜伦鲁鲁| 久久99精品久久久久久久不卡 | 久久综合九色欧美综合狠狠| 精品综合久久久久久88小说| 久久久久久久国产免费看| 无码人妻久久一区二区三区蜜桃| 一本久道久久综合狠狠躁AV | 一本色道久久HEZYO无码| 久久SE精品一区二区| 久久综合给合久久国产免费 | 亚洲Av无码国产情品久久| 色偷偷91久久综合噜噜噜噜| 色综合久久夜色精品国产| 久久久久亚洲AV无码专区首JN| 亚洲中文字幕无码久久2020| 狠狠色丁香久久婷婷综合五月| 亚洲国产精品久久| yy6080久久| av国内精品久久久久影院| 国内精品久久久久久麻豆| 97精品伊人久久大香线蕉| 精品久久久久久成人AV| 久久久受www免费人成| 热99RE久久精品这里都是精品免费| 无码人妻精品一区二区三区久久久 | 欧美国产成人久久精品| 久久中文娱乐网| 亚洲成av人片不卡无码久久| 久久青青草原精品国产|