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

            pku 3488 March of the Penguins 網(wǎng)絡(luò)流+拆點(diǎn)

            題意:
            有N個(gè)點(diǎn),每個(gè)點(diǎn)上有K只青蛙。每個(gè)點(diǎn)有限制起跳次數(shù)。問(wèn)那些點(diǎn)青蛙們可以作為相聚地點(diǎn)
            解法:
            拆點(diǎn),然后在兩個(gè)分點(diǎn)中加入限制條件
            代碼:
              1# include <cstdio>
              2# include <cstring>
              3# include <cmath>
              4# include <vector>
              5using namespace std;
              6int n;
              7double d;
              8vector<int> ans;
              9# define le(a,b) (fabs((a)-(b))<1e-6||(a)<(b))
             10# define typec int // type of cost
             11# define inf  0xfffffff // max of cost
             12# define E 30000
             13# define N 300
             14struct edge int x, y, nxt; typec c; } bf[E];
             15int ne, head[N], cur[N], ps[N], dep[N];
             16void init()
             17{
             18    ne=0;
             19    memset(head,-1,sizeof(head));
             20}

             21void addedge(int x, int y, typec c)
             22// add an arc(x -> y, c); vertex: 0 ~ n-1;
             23    bf[ne].x = x; bf[ne].y = y; bf[ne].c = c;
             24    bf[ne].nxt = head[x]; head[x] = ne++;
             25    bf[ne].x = y; bf[ne].y = x; bf[ne].c = 0;
             26    bf[ne].nxt = head[y]; head[y] = ne++;
             27}

             28typec flow(int n, int s, int t)
             29{
             30    typec tr, res = 0;
             31    int i, j, k, f, r, top;
             32    while (1)
             33    {
             34        memset(dep, -1, n * sizeof(int));
             35        for (f = dep[ps[0= s] = 0, r = 1; f != r; )
             36            for (i = ps[f++], j = head[i]; j!=-1; j = bf[j].nxt)
             37                {
             38                    if (bf[j].c && -1 == dep[k = bf[j].y])
             39                    {
             40                        dep[k] = dep[i] + 1; ps[r++= k;
             41                        if (k == t)
             42                            { f = r; break; }
             43                    }

             44                }

             45        if (-1 == dep[t]) break;
             46        memcpy(cur, head, n * sizeof(int));
             47        for (i = s, top = 0; ; )
             48        {
             49            if (i == t)
             50            {
             51                for (k = 0, tr = inf; k < top; ++k)
             52                    if (bf[ps[k]].c < tr)
             53                        tr = bf[ps[f = k]].c;
             54                for (k = 0; k < top; ++k)
             55                    bf[ps[k]].c -= tr, bf[ps[k]^1].c += tr;
             56                res += tr; i = bf[ps[top = f]].x;
             57            }

             58            for (j=cur[i]; cur[i] != -1; j = cur[i] = bf[cur[i]].nxt)
             59                if (bf[j].c && dep[i]+1 == dep[bf[j].y]) break;
             60            if (cur[i] != -1)
             61            {
             62                ps[top++= cur[i];
             63                i = bf[cur[i]].y;
             64            }

             65            else
             66            {
             67                    if (0 == top) break;
             68                    dep[i] = -1; i = bf[ps[--top]].x;
             69            }

             70        }

             71    }

             72    return res;
             73}

             74
             75
             76struct node
             77{
             78   double x,y;
             79   int num,maxt;
             80}
            data[101];
             81int main()
             82{
             83    //freopen("ans.txt","w",stdout);
             84    int test;
             85    scanf("%d",&test);
             86    while(test--)
             87    {
             88       int totalnum=0;
             89       ans.clear();
             90       scanf("%d%lf",&n,&d);
             91       for(int i=0;i<n;i++)
             92       {
             93          scanf("%lf%lf%d%d",&data[i].x,&data[i].y,&data[i].num,&data[i].maxt);
             94          totalnum+=data[i].num;
             95       }

             96       for(int target=0;target<n;target++)
             97       {
             98          init();
             99          for(int i=0;i<n;i++)
            100          {
            101             addedge(0,2*i+1,data[i].num);
            102             addedge(2*i+1,2*i+2,data[i].maxt);
            103             for(int j=0;j<i;j++)
            104                if(le((data[i].x-data[j].x)*(data[i].x-data[j].x)+(data[i].y-data[j].y)*(data[i].y-data[j].y),d*d))
            105                {
            106              //    printf("%d,%d\n",i,j);
            107                   addedge(2*i+2,2*j+1,inf);
            108                   addedge(2*j+2,2*i+1,inf);
            109                }

            110          }

            111          int tt=flow(2*n+1,0,2*target+1);
            112          if(tt==totalnum)
            113              ans.push_back(target);
            114       }

            115       if(ans.empty()) printf("-1\n");
            116       else
            117       {
            118           printf("%d",ans[0]);
            119           for(int i=1;i<ans.size();i++)
            120             printf(" %d",ans[i]);
            121           printf("\n");
            122       }

            123    }

            124    return 0;
            125}

            126
            127

            posted on 2010-12-02 22:39 yzhw 閱讀(157) 評(píng)論(0)  編輯 收藏 引用 所屬分類: graph

            <2010年12月>
            2829301234
            567891011
            12131415161718
            19202122232425
            2627282930311
            2345678

            導(dǎo)航

            統(tǒng)計(jì)

            公告

            統(tǒng)計(jì)系統(tǒng)

            留言簿(1)

            隨筆分類(227)

            文章分類(2)

            OJ

            最新隨筆

            搜索

            積分與排名

            最新評(píng)論

            閱讀排行榜

            99热热久久这里只有精品68| 久久久久久午夜精品| 97久久超碰国产精品2021| 久久久久久人妻无码| 久久久久中文字幕| 色综合久久88色综合天天 | 狠狠综合久久综合88亚洲| AV无码久久久久不卡蜜桃| 久久精品综合一区二区三区| 奇米影视7777久久精品人人爽| 国产成人精品久久综合| 久久久久国产精品嫩草影院| 一本久久综合亚洲鲁鲁五月天亚洲欧美一区二区 | 亚洲国产精品无码久久一区二区| 久久e热在这里只有国产中文精品99| 国产精品久久久久久久久免费| 99久久精品费精品国产 | 久久66热人妻偷产精品9| 色成年激情久久综合| 亚洲欧洲久久av| 亚洲一本综合久久| 久久精品人人槡人妻人人玩AV| 久久九九免费高清视频| 欧美喷潮久久久XXXXx| 久久亚洲精品国产精品婷婷| 国产成人精品久久一区二区三区| 久久久久婷婷| 91久久精品国产成人久久| 亚洲va久久久噜噜噜久久天堂| 久久天天躁狠狠躁夜夜av浪潮 | 久久久久人妻精品一区三寸蜜桃| AAA级久久久精品无码片| 精品久久久无码中文字幕| 97久久久久人妻精品专区| 人妻少妇精品久久| 久久激情五月丁香伊人| 久久久久国产精品| 93精91精品国产综合久久香蕉| 人妻无码αv中文字幕久久琪琪布| 久久精品国产99久久香蕉| 久久妇女高潮几次MBA|