=t的種數(shù)。解題思路:并查集+簡單dp+二分。比賽的時候各種TLE和MLE。只是查找方式不對。隊友思路,先按邊從小到大排序考慮,對于每條邊E該邊兩個節(jié)點為a、b,如果a、b不在同一" />

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

并查集+二分-hdu-4750-Count The Pairs

系統(tǒng) 1769 0

題目鏈接:

http://acm.hdu.edu.cn/showproblem.php?pid=4750

題目大意:

給一無向圖,n個點,m條邊,每條邊有個長度,且不一樣。定義f(i,j)表示從節(jié)點i到節(jié)點j的所有路徑中的最大邊權(quán)值的最小值。有q個詢問,每個詢問有個t,求f(i,j)>=t的種數(shù)。

解題思路:

并查集+簡單dp+二分。

比賽的時候各種TLE和MLE。只是查找方式不對。

隊友 思路,先按邊從小到大排序考慮,對于每條邊E該邊兩個節(jié)點為a、b,如果a、b不在同一個聯(lián)通塊,則a聯(lián)通塊中點集A和b聯(lián)通塊中點集B的f值一定為E(因為E升序)。恰好能使其通路。

map[i]表示以權(quán)值為i的邊作為f值的點對個數(shù)。

sum[i]表示以大于等于第i大邊權(quán)值的權(quán)值作為f值得點對總的個數(shù)。

對于每一個t,在排序了的sig[i](能取的邊權(quán)值)中二分找到大于等于它的最小的小標(biāo)j。輸出sum[j]即可。

注意:

求點對個數(shù)時要乘以2.

代碼:

?

    #include<iostream>

#include<cmath>

#include<cstdio>

#include<cstdlib>

#include<string>

#include<cstring>

#include<algorithm>

#include<vector>

#include<map>

#include<set>

#include<stack>

#include<list>

#include<queue>

#include<ctime>

#define eps 1e-6

#define INF 0x3fffffff

#define PI acos(-1.0)

#define ll __int64

#define lson l,m,(rt<<1)

#define rson m+1,r,(rt<<1)|1

#pragma comment(linker, "/STACK:1024000000,1024000000")

using namespace std;



#define Maxn 11000

#define Maxm 510000

struct Edge

{

    int a,b,c;

}edge[Maxm];

map<int,int>myp;



short int fa[Maxn],num[Maxn];

int n,m;

int sum[Maxm],sig[Maxm];



bool cmp(struct Edge aa,struct Edge bb)

{

    return aa.c<bb.c; //對邊排序

}



int find(int x) //并查集 路徑壓縮

{

    int tmp=x;



    while(x!=fa[x])

        x=fa[x];



    while(fa[tmp]!=x)

    {

        int tt=fa[tmp];

        fa[tmp]=x;

        tmp=tt;

    }

    return x;

}





int main()

{

   //freopen("in.txt","r",stdin);

   //freopen("out.txt","w",stdout);

   while(~scanf("%d%d",&n,&m))

   {

       int a,b,c;

       myp.clear();



       for(int i=1;i<=m;i++)

       {

           scanf("%d%d%d",&a,&b,&c);

           edge[i].a=a,edge[i].b=b,edge[i].c=c;

           sig[i]=c;

       }

       sort(edge+1,edge+m+1,cmp);

       for(int i=0;i<=n;i++)

       {

           fa[i]=i;

           num[i]=1; //以i為根的聯(lián)通塊點的個數(shù)

       }

       for(int i=1;i<=m;i++)

       {

           int ra=find(edge[i].a);

           int rb=find(edge[i].b);

           if(ra!=rb) //不在一個聯(lián)通塊內(nèi),兩個塊內(nèi)的點通過該邊連接,f值為該邊

           {

               if(myp.find(edge[i].c)!=myp.end())

                   myp[edge[i].c]=myp[edge[i].c]+num[ra]*num[rb]*2;

                else

                    myp[edge[i].c]=num[ra]*num[rb]*2;

                fa[rb]=ra; //合并

                num[ra]+=num[rb];

           }

       }

       int q;

       scanf("%d",&q);

       sort(sig+1,sig+m+1); //對邊權(quán)值排序

       memset(sum,0,sizeof(sum));//sum[i]表示以大于等于第i大邊權(quán)值的權(quán)值作為f值得點對總的個數(shù)。

       sum[m]=myp[sig[m]];

       for(int i=m-1;i>=1;i--)

            sum[i]+=sum[i+1]+myp[sig[i]];

       for(int i=1;i<=q;i++)

       {

          int tt;

          scanf("%d",&tt);

          int pos=lower_bound(sig+1,sig+m+1,tt)-sig;//二分查找位置

          printf("%d\n",sum[pos]);



       }



   }

   return 0;

}




  


?



?

并查集+二分-hdu-4750-Count The Pairs


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 99精品国产兔费观看66 | 免费国产午夜在线观看 | 伊人丁香狠狠色综合久久 | 久久精品久久久久 | 久久精品影院永久网址 | 深夜免费福利视频 | 一区二区三区高清 | 亚洲国产精品成人久久 | 亚洲国产精品一区二区久久hs | 国产成人综合欧美精品久久 | 色偷偷免费视频 | 黄色片免费在线观看视频 | 色婷婷六月桃花综合影院 | 奇米影视第四色888 奇米影视第四色首页 | 大毛片a大毛片 | 成人二区 | 久久香蕉国产线看观看乱码 | 国产伦精品一区二区三区 | 亚洲热在线观看 | 一级免费黄色毛片 | 99r在线| 久久草精品 | 国产热热| 欧美一级片在线免费观看 | 亚洲免费福利视频 | 亚洲精品国产成人 | 特级黄色 | 热99在线视频 | 国产精品一区伦免视频播放 | 国产精品11页 | 色涩视频 | 色综合久久综合网欧美综合网 | 欧美大屁股精品毛片视频 | 久久香蕉国产线看免费 | 日本高清一级做a爱过程免费视频 | 在线免费黄色网址 | 97精品国产 | 日本精品区 | 日韩午夜在线视频 | 欧美日韩一区二区综合在线视频 | 日韩一级黄色影片 |