hdu5961傳遞(bitset亂搞)

2021-07-24 09:18:34 字數 1813 閱讀 8551

hdu5961

題意:中文題題解:

1、判斷傳遞的條件為:若g中有 一條邊從a到b且有一條邊從b到c ,則g中同樣有一條邊從a到c。

2、我們去列舉b,我們假設集合sb

= 表示有一條

x 指向

b的邊。我們假設集合tb

= ,表示有有一條

b 指向

x的邊。

3、我們再去列舉sb

中的元素,假設我們當前列舉的是

x ,因為

x是指向

b 的,所以我們根據題意容易得知該圖是傳遞圖的話一定滿足:tx

∩tb=

tb,然後就可以得出答案了,至於怎麼處理集合的並,我們可以用bitset搞搞就可以了!!!具體看**。

**:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define pi 2*asin(1.0)

#define ll long long

#define pb push_back

#define pa pair

#define clr(a,b) memset(a,b,sizeof(a))

#define lson lr<<1,l,mid

#define rson lr<<1|1,mid+1,r

#define bug(x) printf("%d++++++++++++++++++++%d\n",x,x)

#define key_value ch[ch[root][1]][0]

const

int mod = 1000000007;

const

int n = 2016+15;

const

int maxn = 200+ 14;

const

int mm=100010;

const

int letter = 130;

const

int inf = 1e9;

const

double pi=acos(-1.0);

const

double eps=1e-8;

using

namespace

std;

inline

int read()

while(ch>='0'&&ch<='9')

return x*f;

}int t,n;

char s[n][n];

bitset

vs[2][n],tt;

int main()}}

int flag=1;

for(int x=1;x<=n;x++)}}

if(!flag) break;

}if(!flag)

for(int i=1;i<=n;i++) vs[0][i].reset(),vs[1][i].reset();

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

flag=1;

for(int x=1;x<=n;x++)}}

if(!flag) break;

}if(flag) puts("t");

else

puts("n");

}return

0;}

HDU 5961 傳遞 bfs亂搞

我們稱乙個有向圖g是傳遞的,當且僅當對任意三個不同的頂點a,若g中有 一條邊從a到b且有一條邊從b到c 則g中同樣有一條邊從a到c。我們稱圖g是乙個競賽圖,當且僅當它是乙個有向圖且它的基圖是完全圖。換句 話說,將完全圖每條邊定向將得到乙個競賽圖。下圖展示的是乙個有4個頂點的競賽圖。現在,給你兩個有向...

hdu 5961 傳遞(暴力搜尋)

我們稱乙個有向圖g是傳遞的,當且僅當對任意三個不同的頂點a,若g中有 一條邊從a到b且有一條邊從b到c 則g中同樣有一條邊從a到c。我們稱圖g是乙個競賽圖,當且僅當它是乙個有向圖且它的基圖是完全圖。換句 話說,將完全圖每條邊定向將得到乙個競賽圖。下圖展示的是乙個有4個頂點的競賽圖。現在,給你兩個有向...

HDU 5961 傳遞 隨機化

我們稱乙個有向圖g是傳遞的,當且僅當對任意三個不同的頂點a,若g中有 一條邊從a到b且有一條邊從b到c 則g中同樣有一條邊從a到c。我們稱圖g是乙個競賽圖,當且僅當它是乙個有向圖且它的基圖是完全圖。換句 話說,將完全圖每條邊定向將得到乙個競賽圖。下圖展示的是乙個有4個頂點的競賽圖。現在,給你兩個有向...