【POJ】【2699】The Maximum Number of Strong Kings
网络流/最大流/二分or贪心
题目大意:有n个队伍,两两之间有一场比赛,胜者得分+1,负者得分+0,问最多有几只队伍打败了所有得分比他高的队伍?
可以想到如果存在这样的“strong king”那么一定是胜场较多的队伍……(比他赢得多的队伍num少,而他总共赢得场数times足够多,至少得满足times>=num吧?)
那么我们可以二分/枚举k,表示胜场前k多的队伍是stong king。(这题范围小,只有10支队伍,如果队伍较多我们就需要二分了……)
最最丧心病狂的是!!!出题人TMD卡读入!!!居然在数字与数字之间会有多个空格!!!像我这样直接遇到空格就a[++n]=v,v=0;的就挂了!!!
妈蛋害我调了一晚上!
1 Source Code 2 Problem: 2699 User: sdfzyhy 3 Memory: 716K Time: 0MS 4 Language: G++ Result: Accepted 5 6 Source Code 7 8 //POJ 2699 9 #include<vector> 10 #include<cstdio> 11 #include<sstream> 12 #include<cstring> 13 #include<cstdlib> 14 #include<iostream> 15 #include<algorithm> 16 #define rep(i,n) for(int i=0;i<n;++i) 17 #define F(i,j,n) for(int i=j;i<=n;++i) 18 #define D(i,j,n) for(int i=j;i>=n;--i) 19 #define pb push_back 20 using namespace std; 21 inline int getint(){ 22 int v=0,sign=1; char ch=getchar(); 23 while(ch<'0'||ch>'9'){ if (ch=='-') sign=-1; ch=getchar();} 24 while(ch>='0'&&ch<='9'){ v=v*10+ch-'0'; ch=getchar();} 25 return v*sign; 26 } 27 const int N=100,M=1000,INF=~0u>>2; 28 typedef long long LL; 29 /******************tamplate*********************/ 30 int n,m,tot,ans,num,a[N]; 31 char s1[N]; 32 struct edge{int to,v;}; 33 struct Net{ 34 edge E[M]; 35 int head[N],next[M],cnt; 36 void ins(int x,int y,int v){ 37 E[++cnt]=(edge){y,v}; 38 next[cnt]=head[x]; head[x]=cnt; 39 } 40 void add(int x,int y,int v){ 41 ins(x,y,v); ins(y,x,0); 42 } 43 int s,t,d[N],Q[M]; 44 bool mklevel(){ 45 F(i,0,t) d[i]=-1; 46 d[s]=0; 47 int l=0,r=-1; 48 Q[++r]=s; 49 while(l<=r){ 50 int x=Q[l++]; 51 for(int i=head[x];i;i=next[i]) 52 if (d[E[i].to]==-1 && E[i].v){ 53 d[E[i].to]=d[x]+1; 54 Q[++r]=E[i].to; 55 } 56 } 57 return d[t]!=-1; 58 } 59 int dfs(int x,int a){ 60 if (x==t) return a; 61 int flow=0; 62 for(int i=head[x];i && flow<a;i=next[i]) 63 if (E[i].v && d[E[i].to]==d[x]+1){ 64 int f=dfs(E[i].to,min(a-flow,E[i].v)); 65 E[i].v-=f; 66 E[i^1].v+=f; 67 flow+=f; 68 } 69 if (!flow) d[x]=-1; 70 return flow; 71 } 72 void Dinic(){ 73 while(mklevel()) ans+=dfs(s,INF); 74 } 75 void init(){ 76 n=0; 77 gets(s1); 78 int v=0; 79 stringstream ss(s1); 80 while(ss >> v) a[++n]=v; 81 } 82 bool check(int k){ 83 cnt=1; F(i,s,t) head[i]=0; 84 F(i,1,n) add(s,i,a[i]); 85 int l=n; 86 F(i,1,n) F(j,i+1,n){ 87 add(++l,t,1); 88 if(i>=k && a[j]>a[i]) add(i,l,1); 89 else add(i,l,1),add(j,l,1); 90 } 91 ans=0; 92 Dinic(); 93 return ans==m; 94 } 95 void solve(){ 96 m=n*(n-1)/2; 97 s=0; t=n+m+1; 98 int l=0,r=n,mid,as=0; 99 /* 100 while(l<=r){ 101 mid=l+r>>1; 102 // printf("l=%d r=%d mid=%d\n",l,r,mid); 103 if (check(mid)) as=mid,r=mid-1; 104 else l=mid+1; 105 } 106 二分 */ 107 // D(i,n,1) if(!check(i)){as=i;break;} 108 109 F(i,1,n) if(check(i)){as=i-1;break;} 110 printf("%d\n",n-as); 111 } 112 }G1; 113 114 int main(){ 115 #ifndef ONLINE_JUDGE 116 freopen("2699.in","r",stdin); 117 freopen("2699.out","w",stdout); 118 #endif 119 int T=getint(); 120 while(T--){ 121 G1.init();G1.solve(); 122 } 123 return 0; 124 }
View Code
转载于:https://www.cnblogs.com/Tunix/p/4379517.html
【POJ】【2699】The Maximum Number of Strong Kings相关推荐
- POJ2699_The Maximum Number of Strong Kings
这题目,,,真是...诶.坑了好久. 给一个有向图.U->V表示U可以打败V并得一分. 如果一个人的得分最高,或者他打败所有比自己得分高的人,那么此人就是king. 现在给出每个人的得分,求最多 ...
- 【POJ3126 Prime Path】【POJ 3087 Shuffle'm Up】【UVA 11624 Fire!】【POJ 3984 迷宫问题】
POJ3126Prime Path 给定两个四位素数a b,要求把a变换到b 变换的过程要 每次变换出来的数都是一个 四位素数,而且当前这步的变换所得的素数 与 前一步得到的素数 只能有一个位 ...
- 【poj题集整理】【存下来并不会看】
主要是整理起来自己用的.网上有多个版本. 初级: 一.基本算法: (1)枚举. (poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2586) ...
- 【HDOJ图论题集】【转】
1 =============================以下是最小生成树+并查集====================================== 2 [HDU] 3 1213 How ...
- 【POJ 2482】 Stars in Your Window(线段树+离散化+扫描线)
[POJ 2482] Stars in Your Window(线段树+离散化+扫描线) Time Limit: 1000MS Memory Limit: 65536K Total Submiss ...
- 【POJ】 1014 Dividing(多重背包,优化)
[POJ] 1014 Dividing(多重背包,优化) [题目链接]http://poj.org/problem?id=1014 题目 Description Marsha and Bill own ...
- 【POJ/算法】 3259 Wormholes(Bellman-Ford算法, SPFA ,FLoyd算法)
Bellman-Ford算法 Bellman-Ford算法的优点是可以发现负圈,缺点是时间复杂度比Dijkstra算法高.而SPFA算法是使用队列优化的Bellman-Ford版本,其在时间复杂度和编 ...
- BZOJ 2287 【POJ Challenge】消失之物
2287: [POJ Challenge]消失之物 Description ftiasch 有 N 个物品, 体积分别是 W1, W2, ..., WN. 由于她的疏忽, 第 i 个物品丢失了. &q ...
- 【POJ 3026】Borg Maze
[POJ 3026]Borg Maze 一个考察队搜索alien 这个考察队能够无限切割 问搜索到全部alien所须要的总步数 即求一个无向图 包括全部的点而且总权值最小(最小生成树 BFS+最小生成 ...
- 【POJ 3273】 Monthly Expense (二分)
[POJ 3273] Monthly Expense (二分) 一个农民有块地 他列了个计划表 每天要花多少钱管理 但他想用m个月来管理 就想把这个计划表切割成m个月来完毕 想知道每一个月最少花费多少 ...
最新文章
- i.MX6UL: i.MX 6UltraLite处理器 - 低功耗,安全,Arm® Cortex®-A7内核
- 范登读书解读《亲密关系》(婚姻、爱情) 笔记
- 菜鸟学SSH(十二)——Hibernate与Spring配合生成表结构
- Linux下的截图工具 KSnapshot
- 用狄拉克函数来构造非光滑函数的光滑近似
- http://blog.sina.com.cn/s/blog_5bd6b4510101585x.html
- 计算机视觉实时目标检测 TensorFlow Object Detection API
- 【算法竞赛学习】金融风控之贷款违约预测-模型融合
- 循环机换变速箱油教程_变速箱油用循环机换还是重力换更好?一次讲清楚,新手司机学学...
- [转]自定义SqlMembershipProvider方法
- (计算机组成原理)第六章总线-第一节:总线概述(概念,分类,系统总线的结构和性能指标)
- magento URL分析,查找修改相应文件
- 「Python-Django」django 实现将本地图片存入数据库,并能显示在web上
- linux 抓包工具_03-Python爬虫工程师-抓包工具
- 命令行cmd跳转到其他地址
- JsChart组件使用
- H264 STAP-A解包代码(测试通过)
- 处理网页上的字符溢出的方法
- stm32f407zg跟ze的区别_STM32F103ZE和STM32F207ZG的芯片区别
- vueminder ultimate 2020中文版(电脑桌面日历工具) v2020.07
热门文章
- python打包不能在其他电脑打开_pyinstaller打包python+opencv 无法在别人电脑上正常运行 问题所在:opencv_ffmpeg341_64.dll...
- C语言打印杨辉三角(C笔记)
- asp.net 点击查询跳转到查询结果页面_【免费毕设】ASP.NET交通信息网上查询系统的设计与实现(源代码+论文+开题报告)...
- 翻译:如何在Mac OS X中设置文件权限chmod
- java架构实践_Java架构实践-关于IO流
- linux安装Anaconda
- 验证服务器的通用性,通用VNFM部署的可行性分析与验证
- 【知识图谱系列】基于生成式的知识图谱预训练模型GPT-GNN
- 为什么选择红黑树作为底层实现
- (1)算法设计与分析_算法设计思路