POJ 2699 The Maximum Number of Strong Kings ——网络流
一定存在一种最优方案,使得分数前几个人是SK
所以我们可以二分答案或者枚举,然后就是经典的网络流建模。
另:输入很Excited
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath> #include <set>
#include <string>
#include <algorithm>
#include <vector>
#include <iostream>
#include <queue> using namespace std; #define F(i,j,k) for (int i=j;i<=k;++i)
#define maxn 1000005
#define inf (0x3f3f3f3f) int read()
{
int x=0,f=1; char ch=getchar();
while (ch<'0'||ch>'9') {if (ch=='-') f=-1; ch=getchar();}
while (ch>='0'&&ch<='9') {x=x*10+ch-'0'; ch=getchar();}
return x*f;
} int m;
int a[101],S,T; bool cmp(int a,int b)
{return a>b;} int h[300001],to[300001],ne[300001],fl[300001],en=0;
int map[300001]; void add (int a,int b,int r)
{
to[en]=b;
fl[en]=r;
ne[en]=h[a];
h[a]=en++;
to[en]=a;
fl[en]=0;
ne[en]=h[b];
h[b]=en++;
} int mp[300001]; bool tell()
{
memset(mp,-1,sizeof mp);
queue <int> q;
while (!q.empty()) q.pop();
q.push(S); mp[S]=0;
while (!q.empty())
{
int x=q.front(); q.pop();
for (int i=h[x];i>=0;i=ne[i])
{
if (fl[i]>0&&mp[to[i]]==-1)
{
mp[to[i]]=mp[x]+1;
q.push(to[i]);
}
}
}
if (mp[T]==-1) return false;
return true;
} int zeng(int k,int now)
{
if (k==T) return now;
int ret=0;
for (int i=h[k];i>=0&&ret<now;i=ne[i])
{
if (fl[i]>0&&mp[to[i]]==mp[k]+1)
{
int tmp=zeng(to[i],min(now-ret,fl[i]));
fl[i]-=tmp; fl[i^1]+=tmp; ret+=tmp;
}
}
if (ret==0) mp[k]=-1;
return ret;
} int dinic()
{
int r=0,t;
while (tell()) while (t=zeng(S,inf)) r+=t;
return r;
} int hash[101][101],sum=0; bool test(int mid)
{
int cnt=a[0]; S=0;
for (int i=1;i<=a[0];++i)
for (int j=1;j<=a[0];++j)
hash[i][j]=++cnt;
T=++cnt;
for (int i=1;i<=a[0];++i) add(S,i,a[i]);
for (int i=1;i<=a[0];++i)
for (int j=1;j<i;++j)
if (j!=i){
add(hash[i][j],T,1);
if (a[i]<a[j]&&i<=mid) add(i,hash[i][j],1);
else
{
add(i,hash[i][j],1);
add(j,hash[i][j],1);
}
}
int out=dinic();
if (out>=sum) return true;
else return false;
} void init()
{
memset(h,-1,sizeof h);
en=0;
} void solve()
{
int l=1,r=a[0];
while (l<r)
{
init();
int mid=(l+r)/2+1;
if (test(mid)) l=mid;
else r=mid-1;
}
printf("%d\n",l);
} char s[1000]; int main()
{
cin>>m; gets(s);
while (m--)
{
sum=0;
cin.getline(s,100);
int x=0; a[0]=0;
for (int i=0;i<strlen(s);++i)
{
if (s[i]>='0'&&s[i]<='9')
a[++a[0]]=s[i]-'0',sum+=a[a[0]];
}
a[++a[0]]=x; sum+=x;x=0;a[0]--;
sort(a+1,a+a[0]+1,cmp);
solve();
}
}
POJ 2699 The Maximum Number of Strong Kings ——网络流的更多相关文章
- POJ 2699 The Maximum Number of Strong Kings Description
The Maximum Number of Strong Kings Description A tournament can be represented by a complete graph ...
- POJ 2699 The Maximum Number of Strong Kings (最大流+枚举)
http://poj.org/problem?id=2699 题意: 一场联赛可以表示成一个完全图,点表示参赛选手,任意两点u, v之间有且仅有一条有向边(u, v)或( v, u),表示u打败v或v ...
- POJ - 2699 The Maximum Number of Strong Kings (最大流+枚举)
题意:有n(n<=10)个选手,两两之间打比赛,共有n*(n-1)/2场比赛,赢一场得1分.给出每个人最后的得分.求有多少个定义如下的strong king:赢了所有得分比自己高的人或本身就是分 ...
- poj 2699 The Maximum Number of Strong Kings 枚举 最大流
题目链接 题意 对于一个竞赛图(有向完全图),其顶点是选手,边是比赛,边\(e=(u,v)\)代表该场比赛中\(u\)战胜\(v\). 现定义选手的分数为其战胜的人的个数(即竞赛图中点的出度).并且定 ...
- poj 2699 The Maximum Number of Strong Kings【最大流+枚举】
因为n很小所以从大到小枚举答案.(从小到大先排个序,因为显然胜利场次越多越容易成为strong king.然后对于每个枚举出来的ans建图.点分别表示人和比赛.s向所有人连接流量为胜利场次的边,所有比 ...
- 【POJ2699】The Maximum Number of Strong Kings(网络流)
Description A tournament can be represented by a complete graph in which each vertex denotes a playe ...
- POJ2699:The Maximum Number of Strong Kings(枚举+贪心+最大流)
The Maximum Number of Strong Kings Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 2488 ...
- POJ2699 The Maximum Number of Strong Kings
Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 2102 Accepted: 975 Description A tour ...
- 【POJ】【2699】The Maximum Number of Strong Kings
网络流/最大流/二分or贪心 题目大意:有n个队伍,两两之间有一场比赛,胜者得分+1,负者得分+0,问最多有几只队伍打败了所有得分比他高的队伍? 可以想到如果存在这样的“strong king”那么一 ...
随机推荐
- mac配置android开发环境(一)
MAC配置ADB环境变量 android环境搭建完成之后需要配置android环境变量,这对以后的运行调试很有帮助. 下面我将一下mac环境下的配置步骤: 1.在本地目录(home directory ...
- ubuntu中使用eclipse开发android,logcat显示问题
〜/工作区/ .metadata / .plugins / org.eclipse.core.runtime / .settings / com.android.ide.eclipse.ddms.pr ...
- build.sbt的定义格式
一个简单的build.sbt文件内容如下: name := "hello" // 项目名称 organization := "xxx.xxx.xxx" // 组 ...
- GUI进化--数据与界面分离
http://blog.csdn.net/doon/article/details/5946862 1.何谓数据和界面分离? GUI,即Graphic User Interface,人机交换界面.连接 ...
- 理解 React,但不理解 Redux,该如何通俗易懂的理解 Redux?(转)
作者:Wang Namelos 链接:https://www.zhihu.com/question/41312576/answer/90782136来源:知乎 解答这个问题并不困难:唯一的要求是你熟悉 ...
- SniperOj-shorter-shellcode-x86
shell-storm 这里可以有一些可以用的shellcode,不过自己写才是biner的骄傲 /奋斗 0x00 不会写shellcode(和一条咸鱼有什么区别/哭) 0x01 这题目前有俩种解法 ...
- lucene4.7实例详解
java.lang.UnsupportedClassVersionError: org/apache/lucene/index/IndexableField : Unsupported major.m ...
- Noip2018 考前准备
目录 基础算法 二分 模拟(未补) 高精(未学习) 搜索(未补) 排序 图论 树的直径 树的重心 最短路算法 Spfa Dijkstra Floyd 最小生成树 kruskal 数论 线性筛 线性筛素 ...
- 概述「并查集补集转化」模型&&luoguP1330 封锁阳光大学
奇妙的模型转化以及并查集思想 模型概述 有图$G=(V,E)$,初始所有点为白色,现在要将其中一些点染为黑色,要求染色后满足:$∀(u,v)∈E$,$∃col_u!=col_v$.求最小染色点数. 题 ...
- [HIHO] 1050 树中的最长路
#1050 : 树中的最长路 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 上回说到,小Ho得到了一棵二叉树玩具,这个玩具是由小球和木棍连接起来的,而在拆拼它的过程中, ...