校內胡策題9月29日,ssw02估分150,實際得分9,這道題估分100,實際爆零
題面講述了乙個ssw02(假)在學校逃課,老師來抓ssw02的故事。輸入:t組資料,每組資料乙個圖
輸出:t組資料,每組輸出一定可以抓到ssw02的點的個數和點。
首先我們想到,這些可以抓到ssw02的點一定是整個圖的割點(如果你這沒想到,可以去重新學習一下割點)。然後我們發現,啊,不對,有的割點好像走都不會走。然後我們加上以下**,去找了一下那些點走過。
void dfs( int u , int fa )
}int now = n ; vis[ now ] = true ;//main中
while( now != 1 )vis[ now ] = true , now = anc[ now ] ;
然後,秒切樣例,一交,100少了個0,只有10。
我們來想想為什麼?
給出下面一組資料:
10 11
1 66 10
10 5
5 88 9
9 33 7
7 22 4
5 67 7
仔細想想,發現我們可能先遍歷5號點,再遍歷6號點,然後5,6都通過了check。
本質原因錯在哪? --我們並沒*** 5 , 6 不在乙個連通塊內。
然後tarjan神仙又出現了,你沒看錯,tarjan在處理割點時還可以處理滿足固定路徑上點的不連通問題。
我們這次先跑dfs得出一條簡單路徑,再跑tarjan,並且在tarjan判斷割點上加上如下**
if( u != root || flag > 1 )cut[ u ] = 1 ;
這樣我們發現,會被之前已在搜尋樹上的點更新的目標點並不會被判斷為必經路的割點(很顯然割掉這個點後,目標點還和搜尋樹相連)
然後沒了。注意題目給的範圍有坑。m>=2*n
#includeusing namespace std;
const int maxn = 400010 ;
int head[ maxn ] , to[ maxn*2 ] , nex[ maxn*2 ] ;
int dfn[ maxn ] , low[ maxn ] , anc[ maxn ];
int t , n , m , tot = 1 , num , root ;
bool vis[ maxn ] , cut[ maxn ] ;
inline int read()
void add( int x , int y )
void tarjan( int u )
}else low[ u ] = min( low[ u ] , dfn[ y ] ) ;
}}void dfs( int u , int fa )
}void work()
dfs( 1 , 1 ) ; for( register int i = 1 ; i <= n ; ++i )vis[ i ] = false ;
int now = n ; vis[ now ] = true ;
while( now != 1 )vis[ now ] = true , now = anc[ now ] ;
for( register int i = 1 ; i <= n ; i++ )
if( !dfn[ i ] )
int ans = 0 ;
for( register int i = 2 ; i < n ; i++ )
if( cut[ i ] )ans++ ;
printf("%d\n",ans);
for( register int i = 2 ; i < n ; i++ )
if( cut[ i ] )
printf("\n") ;
for( register int i = 1 ; i <= n ; ++i )
vis[ i ] = dfn[ i ] = low[ i ] = head[ i ] = anc[ i ] = 0 ;
tot = 1 , num = 0 ;
}int main()/*1
5 51 2
2 33 4
4 54 1
*/
絢蘭人生上大學不是必經路
說起高考至今心有餘悸不是假。慶幸的是時光不會再回到那如坐針毯般的日子,欣慰的是時間驗證了我們一路走來的痕跡。是的。我們都一樣緊張過 期盼過 激動過 失落過。高考成績揭幕在即,是好是歹 人各有命 想對你們說,盡力了就好!在落榜面前沒什麼了不起,重要的是,要懂得珍惜自己 珍惜生命,那句話怎麼說來著 留得...
Tarjan演算法縮點 DAG最長路 DP
我們按照複雜程度來討論不同的tarjan演算法變形的差異.但此時只是有所區分的將所有的點劃分為乙個個的強連通分量,尚且沒有縮點.上面這個功能實現起來最簡單.它的tarjan函式內 的.void tarjan int u else if in stack v 還剩下一種不在棧中但是已經訪問過的情況,是...
題解 P2661 資訊傳遞(tarjan)
這道題用來解決的方法很多,最近學了tarjan,所以我們不妨用tarjan來解決。我們將這個關係用有向圖的方式存下來,那麼答案就是這個圖里最小的環的大小。對於tarjan陣列,我們記錄dfn代表時間戳,low代表其強連通分量中的根的時間戳 大概吧 初始化dfn low index,然後把這個點存進棧...