裸網路流拆點就可以了。。。
#include#include#include#includeusing namespace std;1442 士兵的旅行#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;
}
基準時間限制:1 秒 空間限制:131072 kb 分值: 160 難度:6級演算法題
收藏關注在某個國家有n個城市,他們通過m條無向的道路相連。每個城市有一支軍隊。第i個城市的軍隊有ai個士兵。現在士兵開始移動。每個士兵可以呆在原地,或者走到和他所在城市直接相鄰的城市,即設每一條邊長度為1的話,他離開之後不能距離原來城市大於1。
判斷移動之後,能不能使得第i個城市恰好有bi個士兵。
input
單組測試資料。output第一行有兩個整數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之間有一條無向的道路。
每兩個城市之間最多有一條無向的道路。
如果能夠調整成功,輸出yes,否則輸出no。input示例
4 4output示例1 2 6 3
3 5 3 1
1 22 3
3 44 2
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的城市出發,每天到達乙個...