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