作者部落格:
解題報告:
考慮能變成一棵樹,肯定說明至少選擇的點不是割點,其次題解裡面說了這個點的度數有特定的要求...
那麼就變成簡單題了...
只需找出不是割點且度數=m-(n-2)的點即可。
注意有一些奇怪的邊界條件...
(不要想當然的以為m=n-1答案是0...)
//it is made by ljh2000#include #include #include #include #include #include #include #include #include using namespace std;
typedef long long ll;
const int maxn = 100011;
const int maxm = 200011;
int n,m,d[maxn],ecnt,first[maxn],next[maxm],to[maxm],dfn[maxn],low[maxn];
int ans,dui[maxn];
bool iscut[maxn];
//需要考慮單獨乙個點在乙個連通塊,而其餘的點構成一棵樹的情況...
inline int getint()
inline void tarjan(int x,int fa,int rt)
else low[x]=min(low[x],dfn[v]);
} if(size>1 && x==rt) iscut[x]=1;
}inline void work()
ecnt=0; int lim=m-(n-2);
for(int i=1;i<=n;i++) if(!dfn[i]) tarjan(i,-1,i);
for(int i=1;i<=n;i++) if(d[i]==lim && (!iscut[i])) dui[++ans]=i;
printf("%d\n",ans);
for(int i=1;i<=ans;i++) printf("%d ",dui[i]);
}int main()
UOJ 67 新年的毒瘤 Tarjan
uoj 一棵 n 個節點的樹顯然有 n 1 條邊,在本題中意味著刪去乙個點之後還剩下 n 2 條邊。那麼找到所有度數為 m n 2 的點就好了。但是因為是一棵樹,所以聯通,所以割點不是答案。include includeusing namespace std define ll long long ...
UOJ67 新年的毒瘤 Tarjan,割點
online judge uoj 67 label tarjan,割點,細節 辭舊迎新之際,喜羊羊正在打理羊村的綠化帶,然後他發現了一棵長著毒瘤的樹。這個長著毒瘤的樹可以用 n 個結點 m 條無向邊的無向圖表示。這個圖中有一些結點被稱作是毒瘤結點,即刪掉這個結點和與之相鄰的邊之後,這個圖會變為一棵樹...
uoj 176 新年的繁榮
給出乙個完全圖,邊權為兩點權值的and,求最大生成樹。這題用最小生成樹的boruvka演算法。大概就是每次找到每乙個聯通塊權值最大的邊,將這些聯通塊合併,直到只剩乙個聯通塊。因為每次聯通塊的個數至少減半,所以只會做log次操作。那麼這題相當於每個點有不同顏色,要找到每個點的異色點中最大的and值。扔...