時間限制 3000 ms
記憶體限制 131072
kb學弟們來了之後,學姐每天都非常高興的和學弟一起玩耍。這一天,學姐想出了這樣乙個遊戲,她畫了一棵樹,樹上共有
n個節點,現在學姐把m(
m≤n)
個石子隨機放在節點上,每個節點可以放多個,每一次操作是指把每乙個節點上的所有石子都往下移動到他某乙個子節點(乙個節點有多個石子可以分別移動到不同子節點),如果沒有子節點則不移動,無法移動的人輸。
學姐說,學弟是紳士應該讓學姐先走,其實學姐已經策劃好了自己一定會贏,但是這時學弟說,學姐先下那麼我來畫樹和放石子吧,學姐驚呆了。現在她來想知道在新的圖上,兩人都按最優方案走,自己還能不能贏。
輸入第一行為乙個整數
t表示資料組數,接下來
t組資料,每組開頭為兩個整數n,
m,表示節點個數和石子個數,1≤
m≤n≤
100000
,接下來一行n−
1個整數,表示2到
n節點的父親節點編號,接下來一行m個整數,表示每乙個石子的位置。資料保證1為根節點。
如果學姐能勝利,輸出"mengmengda!",否則輸出"so sad..."。沒有引號。
1
3 11 1
1
mengmengda!
裸的every-sg,連sg具體值都不用求,有問題的地方大概就是,當sg==0(必敗)的時候,下一步會選取的是長度最小的某必勝態勢,當sg==1的時候,選取長度最大的某必敗態勢.(不要加入必勝態勢)
#include #include #include using namespace std;
#define maxn 100002
int step[maxn];
int first[maxn];
int next[maxn];
int to[maxn];
int sg[maxn];
int mex(int i)
return sg[i]=0;
}int edgeindex;
void addedge(int from,int _to)
int dfs(int i)
minstatus=min(minstatus,dfs(to[p])+1);
p=next[p];
}return step[i]=sg[i]==0?minstatus:maxstatus;
}int main()
for(int i=n;i>=1;i--)mex(i);
for(int i=n;i>=1;i--)dfs(i);
int maxstep=0;
while(m--)
if(maxstep&1)
double caldis(int x1,int y1,int x2,int y2)
void caldk(int x0,int y0,int x1,int y1,double d,double& ans1,double &ans2)
bool fl2=false;
for(int i=1;i<12;i++){
if(caldis(x[0],y[0],x[i],y[i])maxk+eps)break;
if(s+eps
北郵新生排位賽10解題報告
時間限制 3000 ms 記憶體限制 65536 kb 喜歡焦叔叔的小妹妹實在是太多了,以至於焦叔叔不得不給她們編號1 n。焦叔叔對於編號為質數的小妹妹有種特別的好感,由於有好感的小妹妹數目太多,焦叔叔自己都數不清楚了,請你來幫忙數一下。多組資料,每行乙個正整數n,n不大於1000000000。資料...
北郵新生排位賽8解題報告
題目出的越來越水了 時間限制 1000 ms 記憶體限制 65536 kb小弱發明了乙個好玩的遊戲,遊戲開始時給你乙個凸多邊形,這個多邊形可以任意旋轉,平移。讓你造出乙個正方形 容器 足夠大 容器的兩邊垂直,兩邊水平。用這個容器把這個多邊形完全包含,且多邊形有且只有一條邊恰好與容器下邊界重合 與外界...
北郵新生排位賽6解題報告
時間限制 3000 ms 記憶體限制 65536 kb小弱的學校很喜歡修路,現在給你一張他學校的地圖,地圖上有n個點和m條雙向邊,每條邊代表一條路,這條路有可能是暢通,也有可能正在修路。大家都知道修路使得交通很不方便。所有小弱很想學校快快的把路修好,使得他能夠很輕鬆的到達主樓915去刷題。但考慮到學...