HDOJ 3605 – Escape 二分圖多重匹配

來源:互聯網
上載者:User

            題意:

                     有N(<=100000)個人要逃離到M(<=10)個星球..每個人有喜歡的星球與不喜歡的星球..而每個星球的容量是有限的..問能否讓所有人都在自己喜愛的星球上..

            題解:

                     二分圖還是有些東西要搞得...第一次接觸這種問題..開始用網路流暴..結果逾時了...網路流寫好點是可以過的..我的dinic效率太低了..要改進...本題其實是一個二分圖多重匹配的問題..其解法和匈牙利差不多..用一個數組存下之前已經放好的..已備後面的調整..

Program:

#include<iostream>#include<stdio.h>#include<algorithm>#include<cmath>#include<stack>#include<string.h>#include<queue>#define ll long long#define esp 1e-5#define MAXN 2000000#define MAXM 50000000#define oo 100000007using namespace std;  int C[15],num[15],n,m,line[15][100005];bool arc[100005][15],used[15];bool dfs(int x){       int i,j;       for (i=1;i<=m;i++)          if (arc[x][i] && !used[i])         {                 used[i]=true;                 if (num[i]<C[i])                 {                         line[i][++num[i]]=x;                         return true;                 }                 for (j=1;j<=num[i];j++)                    if (dfs(line[i][j]))                    {                         line[i][j]=x;                         return true;                    }         }       return false;}int getans(){       int i;       memset(num,0,sizeof(num));       for (i=1;i<=n;i++)       {              memset(used,false,sizeof(used));              if (!dfs(i)) return false;       }       return true;}int main()  {               int i,j,x;         while (~scanf("%d%d",&n,&m))       {                for (i=1;i<=n;i++)                  for (j=1;j<=m;j++)                  {                         scanf("%d",&x);                         arc[i][j]=x;                  }               for (i=1;i<=m;i++) scanf("%d",&C[i]);               if (getans()) printf("YES\n");                       else  printf("NO\n");       }       return 0;  }  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.