部落衛隊 2281

2021-07-25 13:39:43 字數 1814 閱讀 9047

部落衛隊

time limit:10000ms  memory limit:65536k

total submit:244 accepted:166

case time limit:1000ms

description

原始部落byteland 中的居民們為了爭奪有限的資源,經常發生衝突。幾乎每個居民都有他的仇敵。部落酋長為了組織一支保衛部落的隊伍,希望從部落的居民中選出最多的居民入伍,並保證隊伍中任何2個人都不是仇敵。

.程式設計任務:

給定byteland 部落中居民間的仇敵關係,程式設計計算組成部落衛隊的最佳方案。

input

第1行有2個正整數n(n<=100)和m,表示byteland部落中有n位居民,居民間有m個仇敵關係。居民編號為1,2,…,n。接下來的m行中,每行有2個正整數u和v,表示居民u與居民v是仇敵。

output

第1行是部落衛隊的頂人數;

第2行是衛隊組成xi ,1 ≤ i ≤ n ,xi=0 表示居民i不在衛隊中,xi =1表示居民i在衛隊中。

sample input

7 10 3

1 2 1 0 1 0 0 0 1

1 4

2 4

2 3

2 5

2 6

3 5

3 6

4 5

5 6

sample output

3    

1 0 1 0 0 0 1

source

type arr=set of 0..100;

var a,f:array[1..100]of boolean;

s:array[1..100]of arr;

w:arr;

n,m,x,y,i,tot,max:longint;

procedure try(k:longint;w:arr;tot:longint);

var i:longint;

begin

if (tot>max)then

begin max:=tot; a:=f;end;

for i:=k+1 to n do

if not(i in w) then

begin

f[i]:=true;

try(i,w+s[i],tot+1);

f[i]:=false;

end;

end;

begin

readln(n,m);

w:=;

fillchar(f,sizeof(f),#0);

max:=-maxlongint;

for i:=1 to m do

begin

readln(x,y);

s[x]:=s[x]+[y];

end;

try(0,w,0);

writeln(max);

for i:=1 to n do

if a[i] then write('1 ')

else write('0 ');

writeln;

end.

C 部落衛隊

問題描述 原始部落byteland中的居民們為了爭奪有限的資源,經常發生衝突。幾乎每個居民都有他的仇敵。部落酋長為了組織一支保衛部落的隊伍,希望從部落的居民中選出最多的居民入伍,並保證隊伍中任何2 個人都不是仇敵。給定byteland部落中居民間的仇敵關係,程式設計計算組成部落衛隊的最佳方案。輸入 ...

部落衛隊pascal解題程式

type jh set of 0.100 集合 varn,m,i,u,v,tj longint w jh a,f array 0.100 of boolean s array 1.100 of jh procedure search dep longint w jh t longint dep是第幾...

部落衛隊問題 分支限界法

問題描述 原始部落byteland中的居民們為了爭奪有限的資源,經常發生衝突。幾乎每個居民都有他的仇敵,部落首長為了組織一支保衛部落的隊伍,希望從部落的居民中選出最多的居民入伍,並保證隊伍中任何2個人都不是仇敵。演算法設計 給定byteland部落中居民間的仇敵關係,計算組成部落衛隊的最佳方案。資料...