网络流/最大流/二分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相关推荐

  1. POJ2699_The Maximum Number of Strong Kings

    这题目,,,真是...诶.坑了好久. 给一个有向图.U->V表示U可以打败V并得一分. 如果一个人的得分最高,或者他打败所有比自己得分高的人,那么此人就是king. 现在给出每个人的得分,求最多 ...

  2. 【POJ3126 Prime Path】【POJ 3087 Shuffle'm Up】【UVA 11624 Fire!】【POJ 3984 迷宫问题】

    POJ3126Prime Path 给定两个四位素数a  b,要求把a变换到b 变换的过程要 每次变换出来的数都是一个 四位素数,而且当前这步的变换所得的素数  与  前一步得到的素数  只能有一个位 ...

  3. 【poj题集整理】【存下来并不会看】

    主要是整理起来自己用的.网上有多个版本. 初级: 一.基本算法:      (1)枚举. (poj1753,poj2965)      (2)贪心(poj1328,poj2109,poj2586)   ...

  4. 【HDOJ图论题集】【转】

    1 =============================以下是最小生成树+并查集====================================== 2 [HDU] 3 1213 How ...

  5. 【POJ 2482】 Stars in Your Window(线段树+离散化+扫描线)

    [POJ 2482] Stars in Your Window(线段树+离散化+扫描线) Time Limit: 1000MS   Memory Limit: 65536K Total Submiss ...

  6. 【POJ】 1014 Dividing(多重背包,优化)

    [POJ] 1014 Dividing(多重背包,优化) [题目链接]http://poj.org/problem?id=1014 题目 Description Marsha and Bill own ...

  7. 【POJ/算法】 3259 Wormholes(Bellman-Ford算法, SPFA ,FLoyd算法)

    Bellman-Ford算法 Bellman-Ford算法的优点是可以发现负圈,缺点是时间复杂度比Dijkstra算法高.而SPFA算法是使用队列优化的Bellman-Ford版本,其在时间复杂度和编 ...

  8. BZOJ 2287 【POJ Challenge】消失之物

    2287: [POJ Challenge]消失之物 Description ftiasch 有 N 个物品, 体积分别是 W1, W2, ..., WN. 由于她的疏忽, 第 i 个物品丢失了. &q ...

  9. 【POJ 3026】Borg Maze

    [POJ 3026]Borg Maze 一个考察队搜索alien 这个考察队能够无限切割 问搜索到全部alien所须要的总步数 即求一个无向图 包括全部的点而且总权值最小(最小生成树 BFS+最小生成 ...

  10. 【POJ 3273】 Monthly Expense (二分)

    [POJ 3273] Monthly Expense (二分) 一个农民有块地 他列了个计划表 每天要花多少钱管理 但他想用m个月来管理 就想把这个计划表切割成m个月来完毕 想知道每一个月最少花费多少 ...

最新文章

  1. i.MX6UL: i.MX 6UltraLite处理器 - 低功耗,安全,Arm® Cortex®-A7内核
  2. 范登读书解读《亲密关系》(婚姻、爱情) 笔记
  3. 菜鸟学SSH(十二)——Hibernate与Spring配合生成表结构
  4. Linux下的截图工具 KSnapshot
  5. 用狄拉克函数来构造非光滑函数的光滑近似
  6. http://blog.sina.com.cn/s/blog_5bd6b4510101585x.html
  7. 计算机视觉实时目标检测 TensorFlow Object Detection API
  8. 【算法竞赛学习】金融风控之贷款违约预测-模型融合
  9. 循环机换变速箱油教程_变速箱油用循环机换还是重力换更好?一次讲清楚,新手司机学学...
  10. [转]自定义SqlMembershipProvider方法
  11. (计算机组成原理)第六章总线-第一节:总线概述(概念,分类,系统总线的结构和性能指标)
  12. magento URL分析,查找修改相应文件
  13. 「Python-Django」django 实现将本地图片存入数据库,并能显示在web上
  14. linux 抓包工具_03-Python爬虫工程师-抓包工具
  15. 命令行cmd跳转到其他地址
  16. JsChart组件使用
  17. H264 STAP-A解包代码(测试通过)
  18. 处理网页上的字符溢出的方法
  19. stm32f407zg跟ze的区别_STM32F103ZE和STM32F207ZG的芯片区别
  20. vueminder ultimate 2020中文版(电脑桌面日历工具) v2020.07

热门文章

  1. python打包不能在其他电脑打开_pyinstaller打包python+opencv 无法在别人电脑上正常运行 问题所在:opencv_ffmpeg341_64.dll...
  2. C语言打印杨辉三角(C笔记)
  3. asp.net 点击查询跳转到查询结果页面_【免费毕设】ASP.NET交通信息网上查询系统的设计与实现(源代码+论文+开题报告)...
  4. 翻译:如何在Mac OS X中设置文件权限chmod
  5. java架构实践_Java架构实践-关于IO流
  6. linux安装Anaconda
  7. 验证服务器的通用性,通用VNFM部署的可行性分析与验证
  8. 【知识图谱系列】基于生成式的知识图谱预训练模型GPT-GNN
  9. 为什么选择红黑树作为底层实现
  10. (1)算法设计与分析_算法设计思路