POJ_2112 二分图多重匹配
阅读原文时间:2023年07月08日阅读:1

题意:

//题意就是给你k个挤奶池和c头牛,每个挤奶池最多可以来m头牛,而且每头牛距离这k这挤奶池
//有一定的距离,题目上给出k+c的矩阵,每一行代表某一个物品距离其他物品的位置
//这里要注意给出的某头牛和某个挤奶池的距离有可能不是最短的,所以这里要用最短路
//来找出来某个物品到其他物品的最小距离,题目上要求出来在满足每头牛都能到达挤奶池的情况下
//使所有牛中到达挤奶池中的最大值尽量小
//全部处理完之后这就是一个二分图多重匹配问题

代码:

1 #include
2 #include
3 #include
4 const int INF=0x3f3f3f3f;
5 using namespace std;
6 int n,m,k;
7 int g[300][300],mpp[300][300];
8 int link[35][20],sum[35],used[35];
9 void floy()
10 {
11 for(int k=1; k<=n+m; k++) 12 { 13 for(int i=1; i<=n+m; i++) 14 { 15 for(int j=1; j<=n+m; j++) 16 { 17 if(g[i][j]>g[i][k]+g[k][j])
18 g[i][j]=g[i][k]+g[k][j];
19 }
20 }
21 }
22 }
23 int dfs_solve(int u)
24 {
25 for(int i=1; i<=n; i++) 26 { 27 if(mpp[u][i]&&!used[i]) 28 { 29 used[i]=1; 30 if(link[i][0]>1;
83 for(int i=n+1; i<=n+m; i++)
84 {
85 for(int j=1; j<=n; j++)
86 {
87 if(g[i][j]<=mid)
88 mpp[i][j]=1;
89 }
90 }
91 if(hungran())
92 r=mid-1;
93 else
94 l=mid+1;
95 }
96 printf("%d\n",l);
97 }
98 }