SCOI2012 奇怪的遊戲 網路流

2021-08-09 08:46:10 字數 2266 閱讀 1205

description

blinker最近喜歡上乙個奇怪的遊戲。 

這個遊戲在乙個 n*m 的棋盤上玩,每個格仔有乙個數。每次 blinker 會選擇兩個相鄰

的格仔,並使這兩個數都加上 1。 

現在 blinker 想知道最少多少次能使棋盤上的數都變成同乙個數,如果永遠不能變成同

乙個數則輸出-1。 

輸入的第一行是乙個整數t,表示輸入資料有t輪遊戲組成。 

每輪遊戲的第一行有兩個整數n和m, 分別代表棋盤的行數和列數。 

接下來有n行,每行 m個數。 

對於每個遊戲輸出最少能使遊戲結束的次數,如果永遠不能變成同乙個數則輸出-1。 2

2 2

1 2

2 3

3 3

1 2 3

2 3 4

4 3 2

2 -1

【資料範圍】 

對於30%的資料,保證  t<=10,1<=n,m<=8 

對於100%的資料,保證  t<=10,1<=n,m<=40,所有數為正整數且小於1000000000 

題解大家去hzwer裡看吧 說的很好  

這只留乙個**

1 #include2 #include3 #include4 #include5

#define maxn 1010

6#define ll long long78

using

namespace

std;910

const ll inf=(1ll<<50

);11

12struct

quix ;

17 quix e[20010

];18

19int head[maxn<<1],cur[maxn<<1],tot=1;20

21int t,n,m,src,decc,n1,n2,mx=-1;22

23 ll s1,s2; //

血的教訓 忘了long long

2425

int depth[maxn<<1],a[50][50],color[50][50

];26

27int x[4]=;

28int y[4]=; //

上下左右我竟然少搜了乙個方向

2930 queueq;

3132 inline void read(int&x)

35while(c>='

0'&&c<='

9')

36 x=x*f;37}

3839 inline void add(int x,int

y,ll z)

4546 inline void add_edge(int x,int

y,ll z)

5051 inline int cal(int i,int

j) 54

55bool

bfs() 70}

71}72return

false;73

}7475 ll dfs(int

now,ll flow) 88}

89if(!used) depth[now]=-1;90

return

used;91}

9293

inline ll dinic()

99100 inline bool

check(ll x)

115}

116else add_edge(cal(i,j),decc,x-a[i][j]);

117if(dinic()==cnt) return

true

;118

return

false

;119

}120

121 inline int

hhh()

136if(n1!=n2)

143 printf("

-1\n");

144}

145else

150 ll l=mx,r=inf;

151while(l<=r)

156 printf("

%lld\n

",(ll)l*n1-s1);

157}

158}

159return0;

160}

161162

int sb=hhh();

163int main()

**

SCOI2012 奇怪的遊戲 網路流

blinker最近喜歡上乙個奇怪的遊戲。這個遊戲在乙個 n m 的棋盤上玩,每個格仔有乙個數。每次 blinker 會選擇兩個相鄰 的格仔,並使這兩個數都加上 1。現在 blinker 想知道最少多少次能使棋盤上的數都變成同乙個數,如果永遠不能變成同 乙個數則輸出 1。輸入的第一行是乙個整數t,表示...

2756 SCOI2012 奇怪的遊戲

time limit 40 sec memory limit 128 mb submit 3052 solved 840 submit status discuss blinker最近喜歡上乙個奇怪的遊戲。這個遊戲在乙個 n m 的棋盤上玩,每個格仔有乙個數。每次 blinker 會選擇兩個相鄰 的...

SCOI2012 二分法 最大流 奇怪的遊戲

這道題初看也許會感覺無法下手,由於每次操作都是相鄰的兩個,所以可以考慮將棋盤黑白染色,這樣我們可以對黑色的格仔和白色的格仔單獨考慮。設黑色格仔個數為cnt1,總和為sum1,白色格仔個數為cnt2,總和為sum2,最終所有格仔都變成了x,則很容易寫出下列的關係式 cnt1 x sum1 cnt2 x...