題意:有a,b,c三個人物要分配個n個太空飛行員,每個太空飛行員恰好要分配乙個任務,設平均年齡為x,只有年齡大於或等於x的太空飛行員才能分配任務a。只有年齡嚴格小於x的太空飛行員才能分配任務b。而任務c沒有限制。有m對太空飛行員相互討厭,因此不能分配到同一任務。程式設計找出乙個滿足上述所有要求的任務分配方案。
分析:2-sat。
建圖:肯定是不能同時去 c 的
同一類的話:
那麼就是2a或者2b了,到底是哪個,就得看年齡了。
#include#include#include
#include
using
namespace
std;
const
int maxn = 100000 + 5;
struct
twosat
void init(int
n)
//x = xval or y = yval
void add_clause(int x, int xval, int y, int
yval)
bool
solve()
}return
true
; }};
intn, m, total_age, age[maxn];
int is_young(intx)
twosat solver;
intmain()
solver.init(n);
for(int i = 0; i < m; i++)
if(!solver.solve()) printf("
no solution.\n");
else
for(int i = 0; i < n; i++)
if(solver.mark[i*2]) printf("
c\n"); //
x[i]=false,去任務c
else
if(is_young(i)) printf("
b\n"); //
x[i]=true的年輕太空飛行員去任務b
else printf("
a\n"); //
x[i]=true的年長太空飛行員去任務a
}
return0;
}
LA 3713 太空飛行員分組
題意 有a b c 3個任務要分配給n個太空飛行員,其中每個太空飛行員恰好要分配乙個任務。設所有n個太空飛行員的平均年齡為x,只有年齡大於或等於x的太空飛行員才能分配任務a 只有年齡嚴格小於x的太空飛行員才能分配任務b,而任務c沒有限制。有m對太空飛行員相互討厭,因此不能分配到同一任務。程式設計找出...
poj 1835 太空飛行員(模擬)
description 問題描述 太空飛行員在太空中迷失了方向,在他的起始位置現在建立乙個虛擬xyz座標系,稱為絕對座標系,太空飛行員正面的方向為x軸正方向,頭頂方向為z軸正方向,則太空飛行員的初始狀態如下圖所示 現對六個方向分別標號,x,y,z正方向分別為0,1,2,負方向分別為3,4,5 稱它們...
POJ1835 太空飛行員(思路)
太空飛行員time limit 2000ms memory limit 30000k total submissions 5997 accepted 2618 description 問題描述 太空飛行員在太空中迷失了方向,在他的起始位置現在建立乙個虛擬xyz座標系,稱為絕對座標系,太空飛行員正面的...