• <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 網絡流+拆點

            題意:
            有N個點,每個點上有K只青蛙。每個點有限制起跳次數。問那些點青蛙們可以作為相聚地點
            解法:
            拆點,然后在兩個分點中加入限制條件
            代碼:
              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 閱讀(152) 評論(0)  編輯 收藏 引用 所屬分類: graph

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

            導航

            統計

            公告

            統計系統

            留言簿(1)

            隨筆分類(227)

            文章分類(2)

            OJ

            最新隨筆

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            久久精品青青草原伊人| …久久精品99久久香蕉国产| 久久久久免费精品国产| 7777精品伊人久久久大香线蕉| 国产精品va久久久久久久| 久久精品99久久香蕉国产色戒 | 色偷偷偷久久伊人大杳蕉| 无码任你躁久久久久久老妇| 精品人妻伦九区久久AAA片69 | 人人狠狠综合久久亚洲婷婷| 久久国产精品-久久精品| 精品久久久无码人妻中文字幕豆芽| 伊人久久久AV老熟妇色| 99久久国产宗和精品1上映| 久久天天躁夜夜躁狠狠躁2022| 亚洲日本va午夜中文字幕久久| 久久丝袜精品中文字幕| 久久精品国产亚洲精品| 狠狠色综合网站久久久久久久| 国产精品成人无码久久久久久| 91精品日韩人妻无码久久不卡| 久久国产乱子精品免费女| 久久精品人人做人人爽电影| 久久国产乱子伦精品免费强| 国产成人精品综合久久久| 久久九九久精品国产| 国产精品99久久久精品无码 | 国产精品99久久久久久www| 久久精品国产亚洲5555| 国产精品久久久久久久久软件| 久久亚洲精品中文字幕| 国产亚洲欧美成人久久片| 久久久久久极精品久久久| 久久久久国产精品人妻| 国产精品岛国久久久久| 久久久久综合中文字幕| 色综合久久久久久久久五月| 亚洲国产精品久久久久婷婷软件| 久久99精品久久久久久齐齐| 综合网日日天干夜夜久久| 久久国产成人精品麻豆|