我們可以考慮拆點,把每個點拆成從左邊過來和從右邊過來兩個,這樣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個同學站成乙個圓圈,其中的乙個同學手裡拿著乙個球,當老師吹哨子時開始傳球,每個同學可以把球傳給自己左右的兩個同學...