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

            poj3469

            Dual Core CPU

            Time Limit: 15000MS Memory Limit: 131072K
            Total Submissions: 12960 Accepted: 5553
            Case Time Limit: 5000MS

            Description

            As more and more computers are equipped with dual core CPU, SetagLilb, the Chief Technology Officer of TinySoft Corporation, decided to update their famous product - SWODNIW.

            The routine consists of N modules, and each of them should run in a certain core. The costs for all the routines to execute on two cores has been estimated. Let's define them as Ai and Bi. Meanwhile, M pairs of modules need to do some data-exchange. If they are running on the same core, then the cost of this action can be ignored. Otherwise, some extra cost are needed. You should arrange wisely to minimize the total cost.

            Input

            There are two integers in the first line of input data, N and M (1 ≤ N ≤ 20000, 1 ≤ M ≤ 200000) .
            The next N lines, each contains two integer, Ai and Bi.
            In the following M lines, each contains three integers: a, b, w. The meaning is that if module a and module b don't execute on the same core, you should pay extra w dollars for the data-exchange between them.

            Output

            Output only one integer, the minimum total cost.

            Sample Input

            3 1
            1 10
            2 10
            10 3
            2 3 1000
            

            Sample Output

            13
            這題點有20000,邊有200000,所以要寫鏈表或者數組模擬
            終于找了個能看懂的了
            而且我覺著這代碼特別神有幾個地方
              1#include<stdio.h>
              2#include<string.h>
              3#include<math.h>
              4#define nmax 20010
              5#define emax 200010
              6#define inf 1<<30
              7int nn;
              8int head[nmax];
              9struct node
             10{
             11    int v,next,w;
             12}
            ;
             13struct node edge[emax*8];
             14int cnt,n,m,s,t;
             15void add(int u,int v,int w)
             16{
             17    edge[cnt].v=v;
             18    edge[cnt].w=w;
             19    edge[cnt].next=head[u];
             20    head[u]=cnt++;
             21    edge[cnt].v=u;
             22    edge[cnt].w=0;
             23    edge[cnt].next=head[v];
             24    head[v]=cnt++;
             25}

             26int sap()
             27{
             28    int pre[nmax],cur[nmax],dis[nmax],gap[nmax];
             29    int flow,aug,u;
             30    int flag;
             31    int i;
             32    flow=0;
             33    aug=inf;
             34    for(i=0; i<=nn; i++)
             35    {
             36        cur[i]=head[i];
             37        gap[i]=0;
             38        dis[i]=0;
             39    }

             40    gap[s]=nn;
             41    u=s;
             42    pre[s]=s;
             43    while(dis[s]<nn)
             44    {
             45        flag=0;
             46        for(int &j=cur[u]; j!=-1; j=edge[j].next)
             47        {
             48            int v=edge[j].v;
             49            if(edge[j].w>0&&dis[u]==dis[v]+1)
             50            {
             51                flag=1;
             52                if(edge[j].w<aug)aug=edge[j].w;
             53                pre[v]=u;
             54                u=v;
             55                if (u==t)
             56                {
             57                    flow+=aug;
             58                    while(u!=s)
             59                    {
             60                        u=pre[u];
             61                        edge[cur[u]].w-=aug;
             62                        edge[cur[u]^1].w+=aug;
             63                        //why?解釋偶數異或1為偶數+1,奇數異或1為奇數-1,
             64                        //顯然我們存的邊是從0開始存的,
             65                        //所以偶數,偶數+1是殘量網格中的兩條邊(無向邊)
             66                    }

             67                    aug=inf;
             68                }

             69                break;
             70            }

             71        }

             72        if (flag) continue;
             73        int mindis=nn;
             74        for(int j=head[u];j!=-1;j=edge[j].next)
             75        {
             76            int v=edge[j].v;
             77            if (edge[j].w>0&&dis[v]<mindis)
             78            {
             79                mindis=dis[v];
             80                cur[u]=j;
             81            }

             82        }

             83        if (--gap[dis[u]]==0)//間隙優化
             84        {
             85            break;
             86        }

             87        dis[u]=mindis+1;
             88        gap[dis[u]]++;
             89        u=pre[u];
             90    }

             91    return flow;
             92}

             93int main()
             94{
             95    int a,b,c,i;
             96    int ans;
             97    while (scanf("%d%d",&n,&m)!=EOF)
             98    {
             99        s=0;
            100        t=n+1;
            101        cnt=0;
            102        memset(head,-1,sizeof(head));
            103        for(i=1; i<=n; i++)
            104        {
            105            scanf("%d%d",&a,&b);
            106            add(s,i,a);
            107            add(i,t,b);
            108        }

            109        for(i=1; i<=m; i++)
            110        {
            111            scanf("%d%d%d",&a,&b,&c);
            112            add(a,b,c);
            113            add(b,a,c);
            114        }

            115        ans=0;
            116        nn=n+2;
            117        ans=sap();
            118        printf("%d\n",ans);
            119    }

            120    return 0;
            121}

            122

            有兩個需要特別注意的循環撒
            那個int j那個很奇怪,怪我語言沒學好
             

            posted on 2012-03-30 15:39 jh818012 閱讀(296) 評論(0)  編輯 收藏 引用

            <2025年7月>
            293012345
            6789101112
            13141516171819
            20212223242526
            272829303112
            3456789

            導航

            統計

            常用鏈接

            留言簿

            文章檔案(85)

            搜索

            最新評論

            • 1.?re: poj1426
            • 我嚓,,輝哥,,居然搜到你的題解了
            • --season
            • 2.?re: poj3083
            • @王私江
              (8+i)&3 相當于是 取余3的意思 因為 3 的 二進制是 000011 和(8+i)
            • --游客
            • 3.?re: poj3414[未登錄]
            • @王私江
              0ms
            • --jh818012
            • 4.?re: poj3414
            • 200+行,跑了多少ms呢?我的130+行哦,你菜啦,哈哈。
            • --王私江
            • 5.?re: poj1426
            • 評論內容較長,點擊標題查看
            • --王私江
            久久婷婷久久一区二区三区| 久久91综合国产91久久精品| 国产午夜精品久久久久九九| 国产成人无码精品久久久久免费 | 狠狠色噜噜狠狠狠狠狠色综合久久| 日韩精品无码久久久久久| 国产精品久久永久免费| 久久久精品国产亚洲成人满18免费网站| 久久精品亚洲精品国产欧美| 久久伊人五月丁香狠狠色| 久久婷婷国产综合精品| 久久精品国产99国产精品 | 久久精品人人做人人妻人人玩| 国内精品欧美久久精品| 色欲综合久久中文字幕网| 香蕉久久一区二区不卡无毒影院| 久久综合鬼色88久久精品综合自在自线噜噜 | 国产精品久久自在自线观看| 亚洲人成电影网站久久| 精品永久久福利一区二区| 人妻少妇精品久久| 精品久久久久久| 久久婷婷五月综合97色一本一本| 无码精品久久一区二区三区 | 精品久久久中文字幕人妻| 免费一级欧美大片久久网| 国产AⅤ精品一区二区三区久久| 日产精品久久久久久久| 久久久久亚洲av成人网人人软件| 国产成人久久777777| 青青青青久久精品国产| 久久精品国产精品国产精品污 | 狠狠色狠狠色综合久久| 色天使久久综合网天天| 久久国产视频网| 久久久WWW成人免费毛片| 超级碰久久免费公开视频| 久久久精品免费国产四虎| 久久综合中文字幕| 久久九九亚洲精品| 国产精品综合久久第一页 |