洛谷 P10P1343 地震逃生 改错

2023-11-02 21:20

本文主要是介绍洛谷 P10P1343 地震逃生 改错,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

P1343 地震逃生

题目描述

汶川地震发生时,四川**中学正在上课,一看地震发生,老师们立刻带领x名学生逃跑,整个学校可以抽象地看成一个有向图,图中有\(n\)个点,\(m\)条边。1号点为教室,\(n\)号点为安全地带,每条边都只能容纳一定量的学生,超过楼就要倒塌,由于人数太多,校长决定让同学们分成几批逃生,只有第一批学生全部逃生完毕后,第二批学生才能从1号点出发逃生,现在请你帮校长算算,每批最多能运出多少个学生,\(x\)名学生分几批才能运完。

输入输出格式

输入格式:

第一行3个整数\(n,m,x(x<2^{31},n<=200,m<=2000)\);以下\(m\)行,每行三个整数\(a,b,c\)描述一条边,分别代表从\(a\)点到\(b\)点有一条边,且可容纳\(c\)名学生。

输出格式:

两个整数,分别表示每批最多能运出多少个学生,\(x\)名学生分几批才能运完。如果无法到达目的地(\(n\)号点)则输出“\(Orz\) \(Ni\) \(Jinan\) \(Saint\) \(Cow!\)


很明显网络流的裸题。

前几天看到对前向星用\(x\) \(nor\) 1\(找反边,觉得很方便,遂用一下,用想到很久没打\)dinic$了,就决定打打(以前都是偷懒打EK的)

不过这样找反边\(head\)最开始时得赋\(-1\),而且边的边界也是-1

因为
\(x\) \(nor\) \(1=x+1\)\(x\)为偶
\(x\) \(nor\) \(1=x-1\)\(x\)为奇

得用上0

然后我.....

1394419-20180520202038594-187095501.png

我是得多智障才这样,居然样例还对了...

还有一点,最后算答案是\((ans-1)/\)最大流\(+1\)

我没给那个\(ans\)减一下


code:

#include <cstdio>
#include <queue>
#include <cstring>
using namespace std;
const int N=204;
const int M=2004;
const int inf=0x3f3f3f3f;
struct Edge
{int w,to,next;
}edge[M*2];
struct node
{int cnt,u;
}S[N];
int n,m,X,cnt=-1,head[N];
int top=0;
void push(int cnt0,int u0) {S[++top].cnt=cnt0,S[top].u=u0;}
void pop() {top--;}
int read()
{int x=0;char c=getchar();while(c<'0'||c>'9') c=getchar();while(c>='0'&&c<='9') {x=x*10+c-'0';c=getchar();}return x;
}void add(int u,int v,int w)
{edge[++cnt].next=head[u],edge[cnt].to=v,edge[cnt].w=w,head[u]=cnt;edge[++cnt].next=head[v],edge[cnt].to=u,edge[cnt].w=0,head[v]=cnt;
}
int dep[N],used[N],ans=0;
queue <int > q;
bool bfs()
{memset(dep,0,sizeof(dep));while(!q.empty()) q.pop();q.push(1);dep[1]=1;while(!q.empty()&&q.front()!=n){int u=q.front();q.pop();for(int i=head[u];i!=-1;i=edge[i].next){int v=edge[i].to,w=edge[i].w;if(!dep[v]&&w){dep[v]=dep[u]+1;q.push(v);}}}return !q.empty();
}
int main()
{memset(head,-1,sizeof(head));n=read(),m=read(),X=read();int u,v,w;for(int i=1;i<=m;i++){u=read(),v=read(),w=read();add(u,v,w);}while(bfs()){memset(used,0,sizeof(used));top=0;push(head[1],1);while(top){if(S[top].u==n){int m_min=inf,id;for(int i=2;i<=top;i++)if(edge[S[i].cnt].w<m_min){m_min=edge[S[i].cnt].w;id=i;}ans+=m_min;for(int i=2;i<=top;i++){edge[S[i].cnt].w-=m_min;edge[(S[i].cnt)^1].w+=m_min;}used[n]=0;top=max(0,id-1);}else{int u=S[top].u;for(int i=head[u];i!=-1;i=edge[i].next){int v=edge[i].to,w=edge[i].w;if(!used[v]&&w&&dep[v]==dep[u]+1){used[v]=1;push(i,v);break;}}if(S[top].u==u) top--;}}}if(ans==0) {printf("Orz Ni Jinan Saint Cow!\n");return 0;}printf("%d %d\n",ans,(X-1)/ans+1);return 0;
}

2018.5.20

转载于:https://www.cnblogs.com/butterflydew/p/9064426.html

这篇关于洛谷 P10P1343 地震逃生 改错的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/333405

相关文章

高精度计算(代码加解析,洛谷p1601,p1303)除法待更新

目录 高精度加法 高精度减法 高精度乘法 高精度加法 我们知道在c++语言中任何数据类型都有一定的表示范围。当两个被加数很大时,正常加法不能得到精确解。在小学,我们做加法都采用竖式方法。那么我们也只需要按照加法进位的方式就能得到最终解。 8 5 6+ 2 5 5-------1 1 1 1 加法进位: c[i] = a[i] + b[i];if(c[i] >=

洛谷 凸多边形划分

T282062 凸多边形的划分 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 先整一个半成品,高精度过两天复习一下补上 #include <iostream>#include <algorithm>#include <set>#include <cstring>#include <string>#include <vector>#include <map>

能量项链,洛谷

解释:  环形dp问题还是考虑将环拉直,可以参考我上一篇文章:环形石子合并 [2 3 5 10 2] 3 5 10 将环拉直,[]内是一个有效的区间,可以模拟吸收珠子的过程,         如[2 3 5] <=>(2,3)(3,5)    2是头,3是中间,5是尾 len >= 3:因为最后[2 10 2]是最小的可以合并的有效区间 len <= n + 1因为[2 3

洛谷P5490扫描线

0是最小的数字,将一个线段看成一个区间,对于一个矩形,从下扫到上,入边为1,而出边为-1,意思是将这个区间上的所有点加1(区间修改).把线段表示为Line[i],其中记录了l,r,h,tag,左右端点,高度,入边还是出边(1或-1) 那么每次区间修改后不为0的区间它的值可能是1,2,3或者是其它数字,这不好统计,可以将它转化一下,0是不是表示没有被覆盖过的地方,我们只要统计0的个数然后用总长减去

职场关系课:职场上的基本原则(安全原则、进步原则、收益原则、逃生舱原则)

文章目录 引言安全原则进步原则收益原则逃生舱原则 引言 职场上的王者,身体里都应该有三个灵魂: 一个文臣,谨小慎微,考虑风险; 一个武将,积极努力,谋求胜利; 一个商人,精打细算,心中有数。 安全原则 工作安全:保住自己的工作和位置信用安全:保住个人的信用,如果领导看到了你的信用受损,你和领导的关系可能会持续恶化。人身安全:有的时候你会遇到偏执的人,要及时和

挤牛奶洛谷uasco

题目描述 三个农民每天清晨5点起床,然后去牛棚给3头牛挤奶。第一个农民在300秒(从5点开始计时)给他的牛挤奶,一直到1000秒。第二个农民在700秒开始,在 1200秒结束。第三个农民在1500秒开始2100秒结束。期间最长的至少有一个农民在挤奶的连续时间为900秒(从300秒到1200秒),而最长的无人挤奶的连续时间(从挤奶开始一直到挤奶结束)为300秒(从1200秒到1500秒)。

python-小理帮老师改错

题目描述 老师给小理发了一封电子邮件,任务如下。 写一个程序,给你 n 个数,输出 X。 X=num1^p1​​+num2^p2​​+⋯+numn^pn​​ num1​,num2​,⋯⋯,numn​ 都是整数,p1​,p2​,⋯⋯,pn​ 都是一位数。 但是出现了一些玄学错误,使得 X 变成了: X=q1​+q2​+...+qn​ 注:qi​=numi​×10+pi​。 例如,原来的 X 为 21

洛谷刷题(7)

P8738 [蓝桥杯 2020 国 C] 天干地支 题目描述 古代中国使用天干地支来记录当前的年份。 天干一共有十个,分别为:甲(jiǎ)、乙(yǐ)、丙(bǐng)、丁(dīng)、戊 (wù)、己(jǐ)、庚(gēng)、辛(xīn)、壬(rén)、癸(guǐ)。 地支一共有十二个,分别为:子(zǐ)、丑(chǒu)、寅(yín)、卯(mǎo)、辰(chén)、巳(sì)、午(wǔ)、

地震模板代码 - 第三部分

Seismic stencil codes - part 3 — ROCm Blogs (amd.com) 2024年8月12日,作者:Justin Chang 和 Ossian O’Reilly。  在前两篇博客文章中,我们开发了一个 HIP 内核,能够计算地震波传播中常用的高阶有限差分。经过优化后,z 方向的内核(在初始实现中表现最差的内核)在单个 MI250X GCD 上实现了近

地震微分方程代码 - 第一部分

Seismic stencil codes - part 1 — ROCm Blogs (amd.com) 2024年8月12日,作者:[Justin Chang](Justin Chang — ROCm Blogs) 和 [Ossian O’Reilly](Ossian O’Reilly — ROCm Blogs)。 在高性能计算(HPC)领域,地震工作负载一直以来都依赖于结构网格上的高