NOIP模擬 種樹

2022-05-12 04:38:23 字數 1634 閱讀 2497

fanvree 很聰明,解決難題時他總會把問題簡單化。例如,他就整天喜歡把圖轉化為樹。但是他不會縮環,那他怎麼轉化呢? 這是乙個有 n個點 m 條雙向邊的圖,fanvree 會選定乙個節點,然後刪掉這個節點和這個點連出去的邊,如果變成了一棵樹,那麼這個節點便是可行的,什麼是樹呢?樹也即無簡單環的無向連通圖。

告訴 fanvree 可能的節點是什麼。

對於 40%的資料:n,m<=1000;

另外存在 10%的資料:m=n-1;

另外存在 20%的資料:m=n;

對於 100%的資料:n,m<=100000

這道水題告訴我,太自信會出事!出大事!

你看那40分的資料,列舉刪哪個點dfs檢驗一下就過了,那10%的,說明不是個聯通的圖,找一下哪個點是單獨的就過了。那20%,說明是樹上加了個邊,找一下就行了。這就70了!!

而我堅信自己寫的是對的,縮了個點,然後刪去乙個點,剩下n-1個點,因此剩下n-2條邊,需要刪去m-(n-2)條邊,只要找度數為這個就沒錯了吧?

然而我跑去縮點,縮了點再在那個環裡找度數為m-(n-2)的邊,完美錯過正解。

其實根本不用縮點,只需要判一下割點,因為割點一定不在環內啊!!!!(顯然,樹上的每乙個點都是割點)而環內可能有割點

哎。。。

#includeusing

namespace

std;

#define n 100010

#define rt register

intn,m,t,cnt,tot,gro,cot,mark,root,child;

intdfn[n],low[n],deg[n],cut[n],ans[n],first[n];

struct

email

e[n*4

];

template

inline

void read(t &x)

while(ch>='

0'&&ch<='

9')

x*=f;

} inline

void add(int u,int

v)

inline

void tarjan(int u,int

fa)

else

low[u]=min(low[u],dfn[v]);

} if(child>1&&u==root)cut[u]=1

; }

intmain()

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

if(!deg[i])

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

if(!dfn[i])

tarjan(i,i);

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

if(deg[i]==(m-(n-2))&&!cut[i])

ans[++cot]=i;

printf(

"%d\n

",cot);

for(rt int i=1;i<=cot;i++)printf("

%d "

,ans[i]);

return

0;

}

NOIP模擬 修路

這題第一眼看上去有些懵逼,還以為是dp。第二眼,哦,這麼裸的最小生成樹,2分鐘打完,拍都沒對,自信100分。最終100分。每條邊的權值減去連個節點的權值,所有的邊做一次最小生成樹就好了。include include include include include define fo i,a,b f...

NOIP模擬 項鍊

經過一番周折,bob找到了alice,為了安慰alice驚魂未定的心,bob決定給alice買一條手鍊,這條手鍊由m個珍珠組成,每個珍珠上刻著不同的小寫字母。當alice看到一些字母按照一定的順序排列成的字串時,就會產生一定的愉悅值。bob現在可以在這m個珍珠上刻上字母,現在他想知道,如何刻字母可以...

NOIP模擬 幻象

phantom是一位愛思考的哲 學家。最近phantom得到了森 妖精的真傳。在他練功的時候,每秒他的思緒中都有一定的概率浮現出奇 異的幻象,持續x秒的幻象將產生 空格 的幻象值。phantom練功發自真心,他想知道,在n秒內他期望產生的幻象值是多少。等我比賽完之後,我們才知道 空格 是x2 所以比...