51nod1442 士兵的旅行

2022-03-30 16:52:30 字數 1400 閱讀 2966

裸網路流拆點就可以了。。。

#include#include#include#includeusing namespace std;

#define rep(i,s,t) for(int i=s;i<=t;i++)

#define dwn(i,s,t) for(int i=s;i>=t;i--)

#define clr(x,c) memset(x,c,sizeof(x))

#define qwq(x) for(edge *o=head[x];o;o=o->next)

int read()

const int nmax=1e3+5;

const int inf=0x7f7f7f7f;

struct edge;

edge es[nmax],*pt=es,*head[nmax];

void add(int u,int v,int d)

int cnt[nmax],h[nmax];

edge *cur[nmax],*p[nmax];

int maxflow(int s,int t,int n)

}else

} return flow;

}int main()

if(maxflow(s,t,t+1)==sb) printf("yes\n");

else printf("no\n");

return 0;

}

1442 士兵的旅行

基準時間限制:1 秒 空間限制:131072 kb 分值: 160 難度:6級演算法題

收藏關注在某個國家有n個城市,他們通過m條無向的道路相連。每個城市有一支軍隊。第i個城市的軍隊有ai個士兵。現在士兵開始移動。每個士兵可以呆在原地,或者走到和他所在城市直接相鄰的城市,即設每一條邊長度為1的話,他離開之後不能距離原來城市大於1。

判斷移動之後,能不能使得第i個城市恰好有bi個士兵。

input

單組測試資料。

第一行有兩個整數n和m(1 ≤ n ≤ 100, 0 ≤ m ≤ 200)。

第二行包含n個整數 a1, a2, ..., an (0 ≤ ai ≤ 100)。

第三行包含n個整數b1, b2, ..., bn (0 ≤ bi ≤ 100)。

接下來m行,每行給出兩個整數 p 和q (1 ≤ p, q ≤ n, p ≠ q),表示p和q之間有一條無向的道路。

每兩個城市之間最多有一條無向的道路。

output

如果能夠調整成功,輸出yes,否則輸出no。
input示例

4 4

1 2 6 3

3 5 3 1

1 22 3

3 44 2

output示例

yes

51nod 1442 士兵的旅行(最大流)

經典網路流模型。虛擬源點,匯點,拆點。拆點是因為每個士兵只能走一步。拆點後可以保證士兵只能走一步遠。然後判斷是否滿流和移動前人數總和是否等於移動後人數總和。include using namespace std const int maxn 1010 const int inf 0x7fffffff...

51nod1273 旅行計畫 貪心

某個國家有n個城市,編號0 至 n 1,他們之間用n 1條道路連線,道路是雙向行駛的,沿著道路你可以到達任何乙個城市。你有乙個旅行計畫,這個計畫是從編號k的城市出發,每天到達乙個你沒有去過的城市,並且旅途中經過的沒有去過的城市盡可能的多 如果有2條路線,經過的沒有去過的城市同樣多,優先考慮編號最小的...

51 nod 1273 旅行計畫 樹DP

1273 旅行計畫 codility 基準時間限制 1 秒 空間限制 131072 kb 分值 80 難度 5級演算法題 某個國家有n個城市,編號0 至 n 1,他們之間用n 1條道路連線,道路是雙向行駛的,沿著道路你可以到達任何乙個城市。你有乙個旅行計畫,這個計畫是從編號k的城市出發,每天到達乙個...