BZOJ3440 傳球遊戲

2021-07-22 16:59:10 字數 1310 閱讀 5102

我們可以考慮拆點,把每個點拆成從左邊過來和從右邊過來兩個,這樣2n個點形成了乙個環套樹森林,乙個人滿足無論如何只能經過一次當且僅當他拆出來的兩個點x和y滿足x不是y的祖先,y不是x的祖先且x,y都不在環上

dfs一下即可

#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;

#define maxn 1000010

#define maxm 1010

#define inf 1000000000

#define mod 1000000007

#define eps 1e-8

#define ll long long

struct vec;

vec mp[maxn];

int tai[maxn],cnt;

int n;

int t[maxn];

int vis[maxn],ic[maxn];

int t;

int bel[maxn],tot;

int g[maxn];

bool ct[maxn];

int ans[maxn],ans;

inline void be(int x,int y)

int p(int x,int d,int f)

void dfs(int x)

}else

} }for(i=tai[x];i;i=mp[i].fro)

vis[x]=0;

}int main()

if(x==2)

if(x==3)

if(x==4)

} for(i=1;i<=n*2;i++)

x=t[x];

}if(flag)

}} }

memset(vis,0,sizeof(vis));

for(i=1;i<=n*2;i++)

} for(i=1;i<=n*2;i++)

} for(i=1;i<=tot;i++)

vis[i]=1;

dfs(i);

vis[i]=0;

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

} printf("%d\n",ans);

for(i=1;i<=ans;i++)

printf("\n");

return 0;}/*

51 2 3 4 1

*/

3440 傳球遊戲

當被傳到球之後,不同的人會做出不同的動作。第1類人,順著傳來的方向傳給下乙個人。第2類人,逆著傳來的方向傳給上乙個人。第3類人,順著傳來的方向傳給下面第二個人。第4類人,逆著傳來的方向傳給上面第二個人。現不知是從哪個人開始傳,及開始傳的方向,求有哪些人無論如何,最多只能碰到一次球 顯然可以拆點,一種...

1763 傳球遊戲

上體育課的時候,小蠻的老師經常帶著同學們一起做遊戲。這次,老師帶著同學們一起做傳球遊戲。遊戲規則是這樣的 n個同學站成乙個圓圈,其中的乙個同學手裡拿著乙個球,當老師吹哨子時開始傳球,每個同學可以把球傳給自己左右的兩個同學中的乙個 左右任意 當老師再次吹哨子時,傳球停止,此時,拿著球沒傳出去的那個同學...

傳球遊戲(DP)

演算法訓練 傳球遊戲 時間限制 1.0s 記憶體限制 256.0mb 問題描述 上體育課的時候,小蠻的老師經常帶著同學們一起做遊戲。這次,老師帶著同學們一起做傳球遊戲。遊戲規則是這樣的 n個同學站成乙個圓圈,其中的乙個同學手裡拿著乙個球,當老師吹哨子時開始傳球,每個同學可以把球傳給自己左右的兩個同學...