[Wc2007]剪刀石头布
[Wc2007]剪刀石头布
http://www.lydsy.com/JudgeOnline/problem.php?id=2597
Time Limit: 20 Sec Memory Limit: 128 MBSec Special Judge
Description
Input
Output
Sample Input
0 1 2
0 0 2
2 2 0
Sample Output
0 1 0
0 0 1
1 0 0
- #include<queue>
- #include<cstdio>
- #include<cstring>
- #define N 5500
- #define M 50000
- using namespace std;
- int win[],cnt;
- int src,decc;
- int front[N],nxt[M],to[M],tot=,from[M];
- int cost[M],cap[M],pre[N];
- int dis[N],ans[][];
- bool v[N];
- queue<int>q;
- void add(int u,int v,int w,int val)
- {
- to[++tot]=v; nxt[tot]=front[u]; front[u]=tot; cap[tot]=w; cost[tot]=val; from[tot]=u;
- to[++tot]=u; nxt[tot]=front[v]; front[v]=tot; cap[tot]=; cost[tot]=-val; from[tot]=v;
- }
- bool spfa()
- {
- memset(dis,,sizeof(dis));
- memset(v,,sizeof(v));
- dis[src]=; q.push(src); v[src]=true;
- int now;
- while(!q.empty())
- {
- now=q.front();
- q.pop(); v[now]=false;
- for(int i=front[now];i;i=nxt[i])
- {
- if(cap[i]>&&dis[to[i]]>dis[now]+cost[i])
- {
- dis[to[i]]=dis[now]+cost[i];
- pre[to[i]]=i;
- if(!v[to[i]])
- {
- v[to[i]]=true;
- q.push(to[i]);
- }
- }
- }
- }
- return dis[decc]<2e9;
- }
- int main()
- {
- int n,x;
- scanf("%d",&n);
- cnt=n+;decc=n+;
- for(int i=;i<=n;i++)
- for(int j=;j<=n;j++)
- {
- scanf("%d",&x);
- if(j>=i) continue;
- if(!x)
- {
- win[j]++;
- ans[j][i]=;
- cnt++;
- add(src,cnt,,);
- add(cnt,j,,);
- }
- else if(x==)
- {
- win[i]++;
- ans[i][j]=;
- cnt++;
- add(src,cnt,,);
- add(cnt,i,,);
- }
- else
- {
- cnt++;
- add(src,cnt,,);
- add(cnt,i,,);
- add(cnt,j,,);
- }
- }
- for(int i=;i<=n;i++)
- {
- for(int j=;j<=win[i];j++) add(i,decc,,);
- for(int j=win[i]+;j<n;j++) add(i,decc,,j-);
- }
- int tmp=;
- while(spfa())
- {
- tmp+=dis[decc];
- for(int i=pre[decc];i;i=pre[from[i]])
- {
- cap[i]--; cap[i^]++;
- }
- }
- for(int i=front[src];i;i=nxt[i])
- {
- int j1=front[to[i]],j2=nxt[j1];
- if(cap[j1]) ans[to[j2]][to[j1]]=;
- else ans[to[j1]][to[j2]]=;
- }
- int sum=n*(n-)*(n-)/;
- for(int i=;i<=n;i++)
- sum-=win[i]*(win[i]-)/;
- printf("%d\n",sum-tmp);
- for(int i=;i<=n;i++)
- {
- for(int j=;j<n;j++)
- printf("%d ",ans[i][j]);
- printf("\n");
- }
- }
错误:一边spfa一边更新答案
原因:费用流也有退流
[Wc2007]剪刀石头布的更多相关文章
- 2597: [Wc2007]剪刀石头布
2597: [Wc2007]剪刀石头布 链接 分析: 费用流. 首先转化一下问题,整张图最优的情况是存在$C_n^3$个,即任意3个都行,然后考虑去掉最少不满足的三元环. 如果u赢了v,u向v连一条边 ...
- [Wc2007]剪刀石头布[补集转化+拆边]
2597: [Wc2007]剪刀石头布 Time Limit: 20 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 1157 Solved: ...
- 【BZOJ2597】[Wc2007]剪刀石头布 最小费用流
[BZOJ2597][Wc2007]剪刀石头布 Description 在一些一对一游戏的比赛(如下棋.乒乓球和羽毛球的单打)中,我们经常会遇到A胜过B,B胜过C而C又胜过A的有趣情况,不妨形象的称之 ...
- [bzoj2597][Wc2007]剪刀石头布_费用流
[Wc2007]剪刀石头布 题目大意:https://www.lydsy.com/JudgeOnline/problem.php?id=2597 题解: 发现直接求三元环不好求,我们考虑任选三个点不是 ...
- BZOJ2597 [Wc2007]剪刀石头布(最小费用最大流)
题目大概是说n个人两两进行比赛,问如何安排几场比赛的输赢使得A胜B,B胜C,C胜A这种剪刀石头布的三元组最多. 这题好神. 首先,三元组总共有$C_n^3$个 然后考虑最小化不满足剪刀石头布条件的三元 ...
- bzoj2597: [Wc2007]剪刀石头布
Description 在一些一对一游戏的比赛(如下棋.乒乓球和羽毛球的单打)中,我们经常会遇到A胜过B,B胜过C而C又胜过A的有趣情况,不妨形象的称之为剪刀石头布情况.有的时候,无聊的人们会津津乐道 ...
- BZOJ2597 WC2007剪刀石头布(费用流)
考虑使非剪刀石头布情况尽量少.设第i个人赢了xi场,那么以i作为赢家的非剪刀石头布情况就为xi(xi-1)/2种.那么使Σxi(xi-1)/2尽量小即可. 考虑网络流.将比赛建成一排点,人建成一排点, ...
- bzoj 2597 [Wc2007]剪刀石头布——费用流
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2597 三个人之间的关系,除了“剪刀石头布”,就是有一个人赢了2局:所以考虑算补集,则每个人对 ...
- 【bzoj2597】[Wc2007]剪刀石头布 动态加边费用流
题目描述 在一些一对一游戏的比赛(如下棋.乒乓球和羽毛球的单打)中,我们经常会遇到A胜过B,B胜过C而C又胜过A的有趣情况,不妨形象的称之为剪刀石头布情况.有的时候,无聊的人们会津津乐道于统计有多少这 ...
随机推荐
- 20172305 2018-2019-1 《Java软件结构与数据结构》第六周学习总结
20172305 2018-2019-1 <Java软件结构与数据结构>第六周学习总结 教材学习内容总结 本周内容主要为书第十章内容: 树(一种非线性结构,其中的元素被组织成一个层次结构) ...
- 《我是IT小小鸟》阅读心得
虽然读这本书是老师布置的作业,但是读了几页后就被书中的内容所吸引住了.或许是因为我也是学这个专业的,所以书中的一些内容让我觉得非常的有兴趣.作为一个学习软件工程的大一学生还没真正的认识到这个专业的深奥 ...
- DB2的编目
D在DB2数据库中,编目(catalog)这个单词很难理解,我自己当初在学习DB2的时候也常常被这个编目搞的很不明白,直到现在我个人也感觉到DB2中编目(catalog)这个术语用的不是很好,具体来说 ...
- so加载报错:dlopen failed: couldn't map ... Permission denied
转自:https://blog.csdn.net/u013270444/article/details/60869376 问题描述: 我的应用当中集成了一个安全相关的sdk,而这个sdk中使用的so是 ...
- linux mysql表名大小写
1.用ROOT登录,修改/etc/my.cnf 2.在[mysqld]下加入一行:lower_case_table_names=1 0:区分大小写,1:不区分大小写 3.重新启动数据库即可
- oracle 数据库 命令
SQL PLUS 命令: SELECT * FROM ALL_TABLES;系统里有权限的表SELECT * FROM DBA_TABLES; 系统表SELECT * FROM USER_TABLES ...
- SQL Inserted和deleted详解
create trigger updateDeleteTime on user for update as begin update user set UpdateTime=(getdate()) f ...
- lock 默认公平锁还是非公平锁?公平锁是如何定义?如何实现
ReentrantLock的实现是基于其内部类FairSync(公平锁)和NonFairSync(非公平锁)实现的. 其可重入性是基于Thread.currentThread()实现的: 如果当前线程 ...
- 小程序 setData() 方法
setData() 参数格式 字段 类型 必填 描述 最低版本 data Object 是 这次要改变的数据 callback Function 否 回调函数 1.5.0 callback 是一个 ...
- iOS开发--字典(NSDictionary)和JSON字符串(NSString)之间互转
iOS开发--字典(NSDictionary)和JSON字符串(NSString)之间互转 1. 字典转Json字符串 // 字典转json字符串方法 -(NSString *)convertToJs ...