2018沈阳网络赛F

正解应该是上下界网络流模板题,被队友用贪心水过去了。

 

 

#include <bits/stdc++.h>
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
#define up rt,rt<<1,rt<<1|1
#define mem(x) memset(x,0,sizeof(x))
#define mem1(x) memset(x,-1,sizeof(x))
using namespace std;
typedef long long ll;
typedef double db;
const int M = 2e3+7;
const double pi = acos(-1);
const int inf = 2147483647;
const int mod = 1e9+7;
vector<int> Left[M];
int Right[M];
int l, r;
int flag,mx;
int cas = 1;
int n, m, k;
void init(){
    mem(Right);
    for(int i=1;i<M;i++) Left[i].clear();
    flag=1;
}
void solve(){
    for(int i = 1; i<=n && flag; i++)
        if(Left[i].size()<l)
              flag = 0;
    for(int i = 1; i<=m && flag; i++)
        if(Right[i]<l)
           flag = 0;
    while(flag){
        for(int i = 1; i<=n && flag; i++){
            while(Left[i].size()>r && flag){
                mx = 0;
                for(int j = 0; j<Left[i].size(); j++)
                    mx = Right[Left[i][j]]>Right[Left[i][mx]]?j:mx;   
                Right[Left[i][mx]]--;
                Left[i].erase(Left[i].begin() + mx);
                if(Right[Left[i][mx]] < l)
                    flag = 0;
            }
        }
        break;
    }
}
int main(){
    while(~scanf("%d%d%d",&n,&m,&k)){
        init();
        scanf("%d%d",&l,&r);
        for(int i = 0; i<k; i++){
            int ll, rr;
            scanf("%d%d", &ll, &rr);
            Left[ll].push_back(rr);
            Right[rr]++;
        }
        solve();
        printf("Case %d: ",cas++);
        flag==1?printf("Yes\n"):printf("No\n");
    }

}
View Code

 

posted @ 2018-09-08 22:20  LMissher  阅读(190)  评论(0)    收藏  举报