codeforces 628F
来源:互联网 发布:淘宝代销店加盟 编辑:程序博客网 时间:2024/05/09 13:55
原题
原题链接
题目大意
给你一个集合的大小
然后有一些限制:
集合里的数范围是
集合中的数
还有
问是否存在一个集合满足条件。
范围
解题思路
我们不妨加一个限制就是元素值为
然后就可以使用网络流了,
参考程序
#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fd(i,a,b) for(int i=a;i>=b;i--)#define maxn 10055#define cannot() puts("unfair")#define can() puts("fair")#define oo 1e9using namespace std;int n,b,q,S,T;int head[maxn],t[maxn*20],next[maxn*20],v[maxn*20],sum;int tmp[10];struct note{ int up,num;}a[maxn];bool cmp(note i,note j){ return i.up<j.up||i.up==j.up && i.num<j.num;}void ins(int x,int y,int z){ t[++sum]=y; v[sum]=z; next[sum]=head[x]; head[x]=sum;}void insert(int x,int y,int z){ ins(x,y,z); ins(y,x,0);}int vh[maxn],dis[maxn],di[maxn],his[maxn],pre[maxn],ans;void sap(){ int tp=T; bool p; vh[0]=tp+1; int x=S; int aug=oo; while (dis[S]<tp){ p=0; his[x]=aug; for(int i=di[x];i;i=next[i]){ if (v[i]&&dis[t[i]]+1==dis[x]){ p=1; di[x]=i; pre[t[i]]=x; aug=min(aug,v[i]); x=t[i]; if (x==T){ ans+=aug; while (x!=S){ int tmp=x; x=pre[x]; v[di[x]]-=aug; v[di[x] ^ 1]+=aug; } aug=oo; } break; } } if (!p){ int k,min; min=tp+1; for(int i=head[x];i;i=next[i]){ if (v[i]&&min>dis[t[i]]){ min=dis[t[i]]; k=i; } } --vh[dis[x]]; if (vh[dis[x]]==0) break; vh[++min]++; dis[x]=min; di[x]=k; if (x!=S){ x=pre[x]; aug=his[x]; } } }}int main(){ sum=1; scanf("%d%d%d",&n,&b,&q); fo(i,1,q) scanf("%d%d",&a[i].up,&a[i].num); a[++q].up=b; a[q].num=n; sort(a+1,a+q+1,cmp); fo(i,2,q){ if (a[i].up==a[i-1].up&&a[i].num!=a[i-1].num){ cannot(); return 0; } if (a[i].up>a[i-1].up&&a[i].num<a[i-1].num){ cannot(); return 0; } } S=0; T=q+1; fo(i,1,q){ if (i>1) tmp[0]=a[i].num-a[i-1].num; else tmp[0]=a[i].num; int down; if (i>1) down=a[i-1].up; else down=0; insert(S,i,tmp[0]); fo(j,0,4) tmp[j]=a[i].up / 5; fo(j,0,a[i].up % 5) tmp[j]++; fo(j,0,4) tmp[j]-=down/5; fo(j,0,down % 5) tmp[j]--; fo(j,0,4) insert(i,T+j,tmp[j]); } fo(i,0,4) insert(T+i,T+5,n / 5); T+=5; sap(); if (ans==n) can(); else cannot(); return 0;}
0 0
- codeforces 628F
- Codeforces 659F F
- Codeforces 628F Bear and Fair Set
- Codeforces 234 F. Fence
- 【Codeforces 500F】Dp
- codeforces 234F - Fence
- F-Logo Turtle codeforces
- 【CODEFORCES】 F. Ant colony
- Codeforces 567F
- CodeForces 241F Race
- Codeforces 611F 思维
- Codeforces 542F 构造
- codeforces 626f
- codeforces 622f
- codeforces 652F
- codeforces 632F
- codeforces 653F
- codeforces 618F
- NYOJ+dp+使用三维数组来记忆
- 正则表达式的基础概念和基础用法
- 【蓝桥杯】根据给定的手机尾号(4位),按照一定的规则来打分
- 蓝桥杯竞赛准备:algorithm头文件的使用 及memset函数的使用
- java开发基本介绍
- codeforces 628F
- 读书笔记--凯文凯利的“必然”
- 【生活技能包】如何设置Win7电脑休眠时不断开WiFi Win7休眠时不断开WiFi教程
- Android使用Fiddler
- iOS 项目的目录结构 业务优先&模块优先
- Atlassian server-side 云端规格
- 【蓝桥杯】判断一个串中的括号是否匹配
- 【考研英语】:考研英语大纲
- mysql中utf8和utf8mb4区别