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"); } }

浙公网安备 33010602011771号