LA3713 2 sat(用到兩種矛盾關係)

2022-09-15 22:36:16 字數 1578 閱讀 2350

1

/*la3713

2典型的2-sat模型

3太空飛行員分兩類:

41、年齡少於平均 young

52、至少為平均

6矛盾:

7情況一:如果兩個太空飛行員屬於同一類且相互矛盾的話,則他們兩個的選擇一定是不相同的

8情況二:如果不屬於同一組相互矛盾,不能同時選c任務

9建模:a/b 2*i

10c 2*i+1

11情況一:2x-->2y+1,2x+1-->2y;2y-->2x+1;2y+1-->2x;

12情況二:2x+1-->2y,2y+1-->2x;

1314

*/15 #include 16 #include 17 #include

18 #include 19 #include 20 #include

21 #include 22 #include 23 #include 24 #include 25 #include 26 #include 27 #include 28 #include

29 #include 30

#define inf 0x3f3f3f3f

31#define ll long long

32#define eps 1e-4

33#define maxn 100010

34using

namespace

std;

35int

age[maxn];

36int

n,m;

37double

**er;

38int nextint()

39int kind(int

age)

4043

struct

twosat

4459

void init(int

n)60

65//

x=xval or y=xval ,x 則 xval=0,x'則xval=1

66void add_clause(int x ,int y,int

k)67

72if (k==1)76

}77bool

solve()

7889}90

}91return

true;92

}93void

printans()

9498

} sat;

99void

read()

100103

//cout<<"a="<104 **er=**er/n;

105//

cout<<"a="<106

}107

void

solve()

108else

120

123}

124if(sat.solve()) sat.printans();else printf("

no solution.\n");

125}

126int

main()

127134

return0;

135 }

搜尋專項 LA 5844

一開始用map記錄對映dfs,結果tle了。然後發現第乙個串中只會出現 a z 所以可以以這26個字母用乙個vis記錄該字母是否被對映,再記錄該字母對映下的字串就可以了。include include include using namespace std char s1 20 s2 60 int ...

LA 1453 旋轉卡殼

include using namespace std struct point typedef point vector int cross vector a,vector b vector operator vector a,vector b vector operator point a,po...

la3716( 數學變形)

translation 給出兩條字串a,b。找出一段最長的子區間,使得區間所有位置x,有不超過p 的位置存在a x b x solution 利用數學變形 構造乙個數列,兩字串相等的位置為0,不等的為1。另sum i 為字首和。則就是求 sum e sum s e s 不超過p 的最長長度是多少?n...