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

2021-08-09 21:55:17 字數 903 閱讀 7008

經典網路流模型。虛擬源點,匯點,拆點。拆點是因為每個士兵只能走一步。拆點後可以保證士兵只能走一步遠。然後判斷是否滿流和移動前人數總和是否等於移動後人數總和。

#include 

using

namespace

std;

const

int maxn = 1010;

const

int inf = 0x7fffffff;

struct edge

;vector

g[maxn];

int level[maxn];

int iter[maxn];

void addedge(int from, int to, int cap)

); g[to].push_back((edge));

}//先分層,然後在分層圖上dfs

void bfs(int s)}}

}int dfs(int v, int t, int f)}}

return0;}

int maxflow(int s, int t)

}int n,m;

int a[maxn];

int b[maxn];

int main()

for(int i = 1; i <= n; ++i)

int u,v;

for(int i = 1; i <= m; ++i)

int res = 0;

res = maxflow(0,n*2+1);

if(res != sum1 || sum1 != sum2)

printf("no\n");

else

printf("yes\n");

return

0;}

51nod1442 士兵的旅行

裸網路流拆點就可以了。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 mem...

51nod 1441 士兵的數字遊戲 素數篩

兩個士兵正在玩乙個遊戲,遊戲開始的時候,第乙個士兵為第二個士兵選乙個正整數n。然後第二個士兵要玩盡可能多的輪數。每一輪要選擇乙個正整數x 1,且n要是x的倍數,然後用n x去代替n。當n變成1的時候,遊戲就結束了,第二個士兵所得的分數就是他玩遊戲的輪數。為了使遊戲更加有趣,第乙個士兵用 a b 來表...

51Nod 1060 最複雜的數

把乙個數的約數個數定義為該數的複雜程度,給出乙個n,求1 n中複雜程度最高的那個數。例如 12的約數為 1 2 3 4 6 12,共6個數,所以12的複雜程度是6。如果有多個數複雜度相等,輸出最小的。input 第1行 乙個數t,表示後面用作輸入測試的數的數量。1 t 100 第2 t 1行 t個數...