非常直觀的建圖方法。
對於有蜥蜴的格仔,從源點向該點連一條容量為1的邊,對於每個石柱拆點u,u'
連邊u -> u',容量為石柱高度
對於任意兩個可以到達的石柱u,v,連邊u' -> v,容量為inf
對於任意乙個可以跳出邊界的石柱,連邊u' -> t,容量為inf
做一次最大流即為最多能逃出的蜥蜴數量
**:
#include#include#includeusing namespace std;
const int maxp = 50;
const int maxn = 5000;
const int maxm = 100000;
const int inf = 0x3f3f3f3f;
struct edge
e[maxm];
int map[maxp][maxp],head[maxn];
int dis[maxn],gap[maxn],cur[maxn],pre[maxn];
bool flag[maxp][maxp];
int s,t,nodenum,ne = 0;
int r,c,d,com = 0;
void init()
void add(int u,int v,int c)
double dist(int x0,int y0,int x1,int y1)
void checkmin(int &a,int b)
void readdata()
scanf("\n");
} for(int i = 1;i <= r;i++)
scanf("\n"); }}
void build_map()
}if(i <= d || i > r - d || j <= d || j > c - d)add((i - 1) * c + j + r * c,t,inf);
}} }
}int sap()
aug = -1;
}goto loop;
}} int mind = nodenum;
for(int i = head[u];i != -1;i = e[i].next)
}if((--gap[dis[u]]) == 0)break;
gap[dis[u] = mind + 1]++;
u = pre[u];
} return maxflow;
}void solve()
int main()
SCOI2007 蜥蜴(最大流)
1066 scoi2007 蜥蜴 time limit 1 sec memory limit 162 mb submit 914 solved 427 submit status discuss description 在乙個r行c列的網格地圖中有一些高度不同的石柱,一些石柱上站著一些蜥蜴,你的任務...
最大流 SCOI2007 蜥蜴
在乙個n m n m 的矩陣中,每個格仔都有一定的高度,當高度為0時表示該格仔不存在,現在這個矩陣中有若干只蜥蜴,每只蜥蜴跳到格仔上時,該格仔的高度會減一,每只蜥蜴可以跳躍直線距離不大於 d d 的長度,問最少有幾隻蜥蜴無法逃離 最少有幾隻蜥蜴無法逃離 蜥蜴總數 最多有幾隻蜥蜴能逃離 對於每個點,我...
P2472 SCOI2007 蜥蜴(最大流)
自己第一道獨立做題且一遍ac的網路流題紀念.看到這道題我就想到網路流建圖的方式了.首先根據每個高度,我們將每個點拆成兩個點限流.之後根據跳的最大距離,連邊,最後能跳出邊界的與t連邊,跑最大流即可.突然發現最大流與網格圖好像有著某種聯絡.include define ll long long usin...