BZOJ 2929 网络流】的更多相关文章

题意是啥--. 思路: 不是与1或n连起来的边 边权是1 否则是inf 跑网络流 //By SiriusRen #include <queue> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int N=66666,inf=0x3f3f3f3f; queue<int>q; int n,num,yy,ans,jy,w[N],v…
2929: [Poi1999]洞穴攀行 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 499  Solved: 295[Submit][Status][Discuss] Description 洞穴学者在Byte Mountain的Grate Cave里组织了一次训练.训练中,每一位洞穴学者要从最高的一个室到达最底下的一个室.他们只能向下走.一条路上每一个连续的室都要比它的前一个低.此外,每一个洞穴学者都要从最高的室出发,沿不同的路走到最低的室.…
2929: [Poi1999]洞穴攀行 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 351  Solved: 195[Submit][Status][Discuss] Description 洞穴学者在Byte Mountain的Grate Cave里组织了一次训练.训练中,每一位洞穴学者要从最高的一个室到达最底下的一个室.他们只能向下走.一条路上每一个连续的室都要比它的前一个低.此外,每一个洞穴学者都要从最高的室出发,沿不同的路走到最低的室.…
求完网络流以后 tarjan一发 判一判 //By SiriusRen #include <queue> #include <bitset> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define N 122222 int n,m,s,t; struct Node{int x,y,w,r;}node[N]; struct Dini…
题面 传送门 分析 考虑网络流 注意到数据包走的是最短路,所以我们只需要考虑在最短路上的边 由于最短路可能有多条,我们先跑一遍Dijkstra,然后再\(O(m)\) 遍历每条边(u,v,w) 如果dist[u]=dist[v]+w,则这条边肯定在最短路上 然后点的容量限制可以用拆点来解(常见套路),从u向u+n连边,容量为c[u] 原图中的边(u,v)在新图中变成边(u+n,v) 然后Dinic求最大流即可 代码 #include<iostream> #include<cstdio&g…
我们可以知道每行最多可以有多少个格子不用建点,设为x[i],每列同理设为y[i],那么我们连接(source,i,x[i]),(i,sink,y[i])表示我们将一个格子不建点,那么(i,j,flag[i][j]),当i,j这个格子可以建点的时候连边表示我们不在这个格子建点,那么n*m-k-最大流就是答案. 因为我们考虑可以在哪一个位置不放点,使得整个矩阵仍然合法,这样我们就可以知道最多有多少个合法的不建点的合法格子. 备注:开始想写有下限的最小可行流的着. /*****************…
首先我们可以知道这道题中每个点只能经过一次,那么我们引入附加源汇source,sink,那么我们可以将每个点拆成两个点,分别表示对于图中这个节点我们的进和出,那么我们可以连接(source,i,1,0),(i+n,sink,1,0),然后对于可以直接到达的点我们可以连接(source,i+n,1,cost)这个代表我们可以从任意一个点到达这个点,对于星球之间的连边我们可以连接(x,y+n,1,cost),代表我们可以从这个星球到另一个星球,因为我们考虑每个点只经过一次,所以可以这样构图,我们并不…
思路: 神建图 源->饮料 边权为1 牛拆点 两个点之间的边权为1 饮料->左牛 边权为1 右牛->食品 边权为1 食品->汇边权为1 //By SiriusRen #include <queue> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int N=4444,M=666666; int n,f,d,jyx…
vis[0]没有清零查一年- //By SiriusRen #include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define N 55555 #define M 3666666 int n,m,xx,yy,first[N],vis[N],nxt[M],v[M],w[M],tot,all,jy,ed,ans,cur[N],q[M],head,tail; void A…
题面 Nick最近在玩一款很好玩的游戏,游戏规则是这样的: 有一个n*m的地图,地图上的每一个位置要么是空地,要么是炮塔,要么是一些BETA狗,Nick需要操纵炮塔攻击BETA狗们. 攻击方法是:对于每个炮塔,游戏系统已经给出它可以瞄准的方向(上下左右其中一个),Nick需要选择它的攻击位置,每一个炮塔只能够攻击一个位置,炮塔只能够向着它的瞄准方向上的某个位置发动攻击,当然炮塔也可以不进行攻击.炮塔威力强大,它可以且仅可以消灭目标位置上所有的BETA狗.出于安全考虑,游戏系统已经保证不存在一个炮…