SGU326Perspective(网络流量的最大流量)(经典赛车模型)
职务地址:http://acm.sgu.ru/problem.php?
contest=0&problem=326
额,这题读错题了。。。又WA了好长时间。。。坚持不看题解也挺浪费时间的。。早点看题解不自己憋着就能早就发现这个傻逼错误了。。。
我的错误是把第三行输入的值误觉得是仅仅有跨赛区的比赛了。事实上后面的括号中非常明显写着包含同赛区的比赛。
。可是我不认识。。
又懒得翻译。。于是这个傻逼错误就诞生了。。
。
这题有一种贪心的思想。就是让队伍1的跨赛区比赛尽可能获胜,其它队伍的跨赛区比赛尽可能输。然后算出此时队伍1与其它队伍的积分差值。
建图方法是建立一个源点与一个汇点,把每一场比赛单独看作一个单位。将比赛与源点连边。权值为这场比赛的比赛数。将每场比赛与比赛两方连边,这个权值能够为无限大,仅仅要大于比赛数就能够。
最后将每一个队与汇点连边,权值为这个队要想不超过队伍1的最大可能分数,即与队伍1的积分差值。
最后求最大流是否满流。
代码例如以下:
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <ctype.h>
#include <queue>
#include <map>
#include<algorithm>
using namespace std;
const int INF=0x3f3f3f3f;
int head[500], souce, sink, nv, cnt;
int cur[500], num[500], d[500], q[500], p[50], mp[30][30], pre[500];
struct node
{
int u, v, cap, next;
} edge[1000000];
void add(int u, int v, int cap)
{
edge[cnt].v=v;
edge[cnt].cap=cap;
edge[cnt].next=head[u];
head[u]=cnt++; edge[cnt].v=u;
edge[cnt].cap=0;
edge[cnt].next=head[v];
head[v]=cnt++;
}
void bfs()
{
memset(num,0,sizeof(num));
memset(d,-1,sizeof(d));
int f1=0, f2=0, i;
d[sink]=0;
num[0]=1;
q[f1++]=sink;
while(f1>=f2)
{
int u=q[f2++];
for(i=head[u];i!=-1;i=edge[i].next)
{
int v=edge[i].v;
if(d[v]==-1)
{
d[v]=d[u]+1;
num[d[v]]++;
q[f1++]=v;
}
}
}
}
int isap()
{
memcpy(cur,head,sizeof(cur));
bfs();
int flow=0, u=pre[souce]=souce, i;
while(d[souce]<nv)
{
if(u==sink)
{
int f=INF, pos;
for(i=souce;i!=sink;i=edge[cur[i]].v)
{
if(f>edge[cur[i]].cap)
{
f=edge[cur[i]].cap;
pos=i;
}
}
for(i=souce;i!=sink;i=edge[cur[i]].v)
{
edge[cur[i]].cap-=f;
edge[cur[i]^1].cap+=f;
}
flow+=f;
u=pos;
}
for(i=cur[u];i!=-1;i=edge[i].next)
{
if(d[edge[i].v]+1==d[u]&&edge[i].cap)
break;
}
if(i!=-1)
{
cur[u]=i;
pre[edge[i].v]=u;
u=edge[i].v;
}
else
{
if(--num[d[u]]==0) break;
int mind=nv;
for(i=head[u];i!=-1;i=edge[i].next)
{
if(mind>d[edge[i].v]&&edge[i].cap)
{
mind=d[edge[i].v];
cur[u]=i;
}
}
d[u]=mind+1;
num[d[u]]++;
u=pre[u];
}
}
return flow;
}
int main()
{
int n, x, i, j, flag=0, s=0, sum=0, ss;
memset(head,-1,sizeof(head));
cnt=0;
scanf("%d",&n);
for(i=1; i<=n; i++)
scanf("%d",&p[i]);
scanf("%d",&x);
p[1]+=x;
for(i=1; i<n; i++)
scanf("%d",&x);
for(i=2; i<=n; i++)
{
if(p[i]>p[1])
{
flag=1;
break;
}
}
if(flag)
{
printf("NO\n");
}
else
{
for(i=1; i<=n; i++)
{
for(j=1; j<=n; j++)
{
scanf("%d",&mp[i][j]);
if(mp[i][j]&&i!=1&&j!=1&&j<i)
{
s++;
add(0,s,mp[i][j]);
sum+=mp[i][j];
}
}
}
//for(i=1;i<=n;i++)
// p[1]+=mp[1][i];
souce=0;
sink=s+n+1;
nv=sink+1;
ss=0;
for(i=2;i<=n;i++)
{
add(s+i,sink,p[1]-p[i]);
for(j=2;j<i;j++)
{
if(mp[i][j])
{
ss++;
add(ss,i+s,mp[i][j]);
add(ss,j+s,mp[i][j]);
}
}
}
x=isap();
if(x>=sum)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
版权声明:本文博主原创文章,博客,未经同意不得转载。
SGU326Perspective(网络流量的最大流量)(经典赛车模型)的更多相关文章
- HDU 3081Marriage Match II(二分法+并检查集合+网络流量的最大流量)
职务地址:http://acm.hdu.edu.cn/showproblem.php? pid=3081 有一段时间没写最大流的题了,这题建图竟然想了好长时间... 刚開始是按着终于的最大流即是做多轮 ...
- 【网络流量最大流量】poj3281Dining
/* EK算法版本号,哦,慢.....见下文dinic版本号 ----------------------------------------- 最大的问题是网络流量问题 -------------- ...
- Linux下网络流量实时监控工具
Linux下网络流量实时监控工具大全 在工作中发现,经常因为业务的原因,需要即时了解某台服务器网卡的流量,虽然公司也部署了cacti软件,但cacti是五分钟统计的,没有即时性,并且有时候打开监控页面 ...
- 利用神经网络进行网络流量识别——特征提取的方法是(1)直接原始报文提取前24字节,24个报文组成596像素图像CNN识别;或者直接去掉header后payload的前1024字节(2)传输报文的大小分布特征;也有加入时序结合LSTM后的CNN综合模型
国外的文献汇总: <Network Traffic Classification via Neural Networks>使用的是全连接网络,传统机器学习特征工程的技术.top10特征如下 ...
- linux 网络数据收发网络流量监控
网卡流量 1.iftop命令 iftop可以用来监控网卡的实时流量(可以指定网段).反向解析IP.显示端口信息.TCP/IP连接等官网:http://www.ex-parrot.com/~pdw/if ...
- windows下使用C#获取特定进程网络流量
最近老板接了一个中船重工的项目,需要做一个有关海军软件系统的组件评估项目,项目中有一个子项目需要获取特定进程的各种系统参数,项目使用.NET平台.在获取特定进程各种系统参数时,其它诸如进程ID,进程名 ...
- 一个链接引发的血案---------服务器 IO及网络流量暴涨解决历程
在这里介绍一次因为更改网站地址而引发服务器IO读取速度,网络流入流出速度暴涨10倍的解决经历. 环境:Ubuntu + Nginx + php-cgi + Wordpress 事情是这样的,现在网站使 ...
- CentOS7 监控进程网络流量工具安装
服务器在做测试的时候,需要监控网络流量,用来了解在不同人数的时候服务器的网络使用量. 我们使用服务器环境是centos7,centos下通常使用iftop,或者nethogs来进行网络流量监控.这2个 ...
- 【读书笔记】iOS网络-测试与操纵网络流量
一,观测网络流量. 观测网络流量的行为叫做嗅探或数据包分析. 1,嗅探硬件. 从iOS模拟器捕获数据包不需要做特别的硬件或网络配置.如果需要捕获这些数据包,那么可以使用嗅探软件来监听回送设备或是用于连 ...
随机推荐
- verilog中阻塞复制,非阻塞复制,顺序块,并行块之间的关系
这几个概念是不一样的 顺序块:顺序块中的语句是按顺序执行的,每条语句中的延迟值是与其前一条语句执行的仿真时间有关. 并行块:并行块语句是并行执行的,它里面的每条语句中指定的延迟值都是相对于语句块开始执 ...
- PostCss 从0开始
PostCss 摘自 http://ju.outofmemory.cn/entry/215105 http://www.w3cplus.com/PostCSS/postcss-deep-dive-pr ...
- java实现发送短信
本程序是通过使用中国网建提供的SMS短信平台实现的(该平台目前为注册用户提供5条免费短信,3条免费彩信,这足够用于我们测试用了.在使用前需要注册,注册地址为http://sms.webchinese. ...
- odi增量更新策略
增量更新策略:通过一个“update key”比较流数据记录与目标表中的记录比较进行数据整合.具有相同“update key”的记录当相关联列不同时将被更新:在目标表中不存在的记录将被插入.这种方式用 ...
- golang仿AS3写的ByteArray
用golang写了个仿AS3写的ByteArray,稍微有点差别,demo能成功运行,还未进行其他测试 主要参考的是golang自带库里的Buffer,结合了binary 来看看demo: packa ...
- openvswitch安装、基本操作
一.安装,配置 //下载源码.编译.安装: #wget http://openvswitch.org/releases/openvswitch-2.3.0.tar.gz #tar -zxvf open ...
- c/c++中与字符串处理相关的函数
void *memccpy (void *dest, const void *src, int c, size_t n); 从src所指向的对象复制n个字符到dest所指向的对象中.如果复制过程中遇到 ...
- Javascript基础篇小结
转载请声明出处 博客原文 随手翻阅以前的学习笔记,顺便整理一下放在这里,方便自己复习,也希望你有也有帮助吧 第一课时 入门基础 知识点: 操作系统就是个应用程序 只要是应用程序都要占用物理内存 浏览器 ...
- GridView边线Border设置
1.黑色实线:(行列都有) <asp:GridViewID="GridView1"runat="server"CellPadding="3&qu ...
- java 设计模式初探之适配器模式
1. 概述 将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作. 2. 解决的问题 即Adapter模式使得原本由于接口不兼容而不 ...