jzoj 4822 完美標號

2021-09-27 03:22:18 字數 1518 閱讀 5807

description

給定m個二元組(a_i, b_i),求x_1, …, x_n滿足:對於任意(a_i, b_i),有|x_ - x_| = 1成立。

input

第1行,2個整數n、m。

第2行到第m + 1行,2個整數a_i和b_i。

output

第1行,1個字串,"yes"表示有解,"no"表示無解。

第2行,n個整數,x_1, x_2, …, x_n,無解則不輸出。

要求|x_i| <= 1,000,000,000,任意一解均可。

sample input

輸入1:

3 31 2

2 33 1

輸入2:

6 51 2

2 33 4

4 15 6

sample output

輸出1:

no輸出2:

yes0 1 0 1 -99 -100

data constraint

對於40%的資料,1 <= n <= 10。

對於100%的資料,1 <= n <= 10,000,0 <= m <= 100,000,1 <= a_i, b_i <= n。

//written by zzy

給你m個二元組(ai, bi),求個,使對於任意(ai, bi),有|x_ai-x_bi|=1

初看以為是數論,後來發現是圖論。

把每個xi看成乙個點,乙個二元組(ai, bi)看成條邊

因為x_ai與x_bi只能差一,所以可以使他們只為0或1

dfs染色,如果當前點沒染過就染上個點相反的色;

如果染過,則判斷是否合法

#include

#include

#include

#include

#include

#define n 10005

#define m 100005

using namespace std;

int i,j,n,m,l,t;

int a[n]

;int x[m*2]

,y[m*2]

,next[m*2]

,list[n]

;bool _check;

bool b[n]

;void

add(

int x)

void

dfs(

int dep,

int p)

else}}

intmain()

for(i=

1;i<=n;i++

) a[i]=-

1,b[i]

=true;

_check=true;

for(i=

1;i<=n;i++)if

(a[i]==-

1)if(_check==false)

printf

("no");

else

}

交叉編譯Qt4 8 2

分類 linux qt 2012 07 04 11 36 171人閱讀收藏 舉報 1.安裝交叉編譯器。利用友善之臂自帶的交叉編譯器。將arm linux gcc 4.3.2.tgz 放在 root下,執行如下操作 cd root tar xvzf arm linux gcc 4.3.2.tgz c ...

482 金鑰格式化

給定乙個金鑰字串s,只包含字母,數字以及 破折號 n 個 將字串分成了 n 1 組。給定乙個數字 k,重新格式化字串,除了第乙個分組以外,每個分組要包含 k 個字元,第乙個分組至少要包含 1 個字元。兩個分組之間用 破折號 隔開,並且將所有的小寫字母轉換為大寫字母。給定非空字串 s 和數字 k,按照...

482 金鑰格式化

有乙個金鑰字串 s 只包含字母,數字以及 破折號 其中,n 個 將字串分成了 n 1 組。給你乙個數字 k,請你重新格式化字串,除了第乙個分組以外,每個分組要包含 k 個字元 而第乙個分組中,至少要包含 1 個字元。兩個分組之間需要用 破折號 隔開,並且將所有的小寫字母轉換為大寫字母。給定非空字串 ...