POJ 1830 開關問題(高斯消元)

2022-09-17 15:57:20 字數 1036 閱讀 8773

題目鏈結

solutin:

將每個開關使用的情況當成未知數,如果開關i能影響到開關j,那麼係數矩陣a[j][i]的係數為1。

每個開關增廣矩陣的值是開關k的初狀態異或開關k的目標狀態,這個應該很容易想到。

方程都列好了,直接消元就好了。

code

/*

解異或方程組

*/#include

#include

using

namespace

std;

const

int maxn = 50

;int

prim[maxn];

inta[maxn][maxn];

int gauss (int n, int

m)

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

row++;

}for (int i = row; i < n; ++i)

if (a[i][n] != 0) return -1

;

return m -row;

}int

n, m, cs, s, t;

intmain()

for (int i = 0, x; i < n; ++i)

t ^=s;

memset (a,

0, sizeof

a);

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

intx, y;

while (cin >> x >> y, x && y) a[y - 1][x - 1] = 1

;

int p =gauss (n, n);

if (p < 0) cout << "

oh,it's impossible~!!

"<

else

cout

<< (1

<< p) <}}

view code

POJ 1830 開關問題 高斯消元

開關問題 time limit 1000ms memory limit 30000k total submissions 3390 accepted 1143 description 有n個相同的開關,每個開關都與某些開關有著聯絡,每當你開啟或者關閉某個開關的時候,其他的與此開關相關聯的開關也會相應...

poj 1830 開關問題 高斯消元

題意是 給一些開關的初始狀態 0 或1 在給出終止狀態,在給出相關的變化規則,規則 x 變化 則 y 也變 x y 讀入。輸出有多少種開關的撥動情況,使初始狀態變成終止狀態。此問題 很容易轉化成 高斯消元 解 異或方程組。t 方程組的自由化的個數,則結果就是 2 t include include ...

poj 1830 開關問題(高斯消元)

終止狀態是從初始狀態由開關組合影響而形成的,那麼就有乙個等式使得初始狀態可以到達終止狀態,例如a,b,c三個開關 e a xa mp a a xb mp a b xc map a c s a e b xa mp b a xb mp b b xc map b c s b e c xa mp c a x...