hdu6667 Roundgod and Milk Tea(Hall定理)

題目鏈接

http://acm.hdu.edu.cn/showproblem.php?pid=6667

題目描述

Problem Description

Roundgod is a famous milk tea lover at Nanjing University second to none. This year, he plans to conduct a milk tea festival. There will be n classes participating in this festival, where the ith class has ai students and will make bi cups of milk tea.
Roundgod wants more students to savor milk tea, so he stipulates that every student can taste at most one cup of milk tea. Moreover, a student can't drink a cup of milk tea made by his class. The problem is, what is the maximum number of students who can drink milk tea?

Input

The first line of input consists of a single integer T (1≤T≤25), denoting the number of test cases.
Each test case starts with a line of a single integer n (1≤n≤10^6), the number of classes. For the next n lines, each containing two integers a,b (0≤a,b≤10^9), denoting the number of students of the class and the number of cups of milk tea made by this class, respectively.
It is guaranteed that the sum of n over all test cases does not exceed 6×10^6.

Output

For each test case, print the answer as a single integer in one line.

Sample Input

1

2

3 4

2 1

Sample Output

3

題意

有n個班級,每個班級有ai個人,可以做出bi杯奶茶,一個班級的人不能喝本班做的奶茶,可以喝別的班做的奶茶,問最多有多少人喝到奶茶。

思路

首先要了解Hall定理以及它的一個推論:

https://www.cnblogs.com/dummyummy/p/10311769.html

Hall定理我們離散數學學到過,想不到在這裏用到了。。。

將人與奶茶分別看作二分圖兩邊的頂點,班級則是所有頂點的子集,同一個班級的人與別的班級的奶茶之間有邊相連,且任意兩個不同班級的人可連接全部的奶茶。這樣問題轉化爲了求二分圖的最大匹配。利用Hall定理的推論很容易就能求出結果。

代碼

#include<bits/stdc++.h>
#define ll long long
#define maxn 1000010
using namespace std;
ll a[maxn],b[maxn],n;

int main(){
	int t,i;
	cin>>t;
	while(t--){
		ll y=0,x=0,ans=0;
		scanf("%lld",&n);
		for(i=1;i<=n;i++){
			scanf("%lld%lld",&a[i],&b[i]);
			x+=a[i];
			y+=b[i];
		}
		if(x<y){
			for(i=1;i<=n;i++){
				ans=max(ans,a[i]-(y-b[i]));
			}
			printf("%lld\n",x-ans);
		}
		else{
			for(i=1;i<=n;i++){
				ans=max(ans,b[i]-(x-a[i]));
			}
			printf("%lld\n",y-ans);			
		}
	}
    return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章