JZOJ5465 道路重建 邊雙縮點 樹的直徑

2022-03-13 04:43:09 字數 2072 閱讀 3209

lueluelue

這鬼題卡了我10發提交,之前做過一道類似的題目:題解p2860-usaco冗雜路徑-縮點-橋/

危險的邊就是橋邊,tarjan求出邊雙后縮點整個圖變成樹,樹邊都是危險的邊,我們需要加一條邊構成乙個新的ecc使危險的邊最小

於是一開始naiive的以為求出所有葉子節點判一判就好了,於是wa*1

發現這個sb思路一看就是錯的,又想到apio 巡邏很像這道題,發現我們只要將樹的直徑兩端點連起來一定是最優的,因為直徑上的邊都成為聯通分量上的了就不是危險的邊

於是求個樹的直徑就好了

結果發現求樹的直徑過程中會遍歷乙個環wtf?!雖然不知道為什麼會有個環但加上個vis陣列就沒事了 wa*2

接著交一發95 最後一點 re 了,這時候才發現邊的範圍1e6

改了一下又交了一發結果5分只過了最後乙個點wtf?! 又是fread的鍋 (noip都不敢用了)

然後終於a了這題...

/*

code by ryecatcher

*/#include #include #include #include #include #include #include #include #include #include #include #define debug freopen("dat.in","r",stdin);freopen("wa.out","w",stdout);

#define fo(x)

#define ri register int

#define ll long long

#define ull unsigned long long

#define size 1<<22

using std::min;

using std::max;

using std::priority_queue;

using std::queue;

using std::vector;

using std::pair;

using namespace __gnu_pbds;

inline char gc()

template inline void read(t &x)

const int maxn=400005;

const int m=4000005;

const int inf=0x7fffffff;

struct edgeedge[m<<1];

int h[maxn],num_edge=1;

inline void add_edge(int f,int to)

struct qaqse[m<<1];

int sh[maxn],num_se=1;

inline void add_se(int f,int to)

int n,m;

int dfn[maxn],low[maxn],tot=0;

bool bri[m<<1];

int in_ecc[maxn],cnt=0;

void tarjan(int now,int id)

for(ri i=sh[now];i;i=se[i].ne)

return ;

}int main()

memset(bri,0,s2);//清空橋邊標記!!!

num_edge=num_se=1;

tot=cnt=0;

for(ri i=1;i<=m;i++)

for(ri i=1;i<=n;i++)if(!dfn[i])tarjan(i,0);

for(ri i=1;i<=n;i++)if(!in_ecc[i])

//printf("%d\n",cnt);

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

}} rt=1,tmp=-1;

dfs1(1,0,0);

memset(vis,0,s1);

dfs1(rt,0,0);

//printf("%d\n",lef);

printf("%d\n",cnt-1-tmp);

//puts("wtf");

} return 0;

}

jzoj1212 重建道路

分析code 第一行有乙個整數n 2 n 100 表示有多少個城市。城市的編號是1 n。第二行有乙個整數m n 1 m n n 1 2,表示有多少條道路。接下來有m行,每行3個整數,x,y,len 1 x,y n,x y.0 len 100 表示城市x和城市y有一條長度為len的雙向道路。再接下來的...

Jzoj4729 道路修建

給你乙個聯通無向圖,問你要修建幾條邊使得該圖是乙個邊雙連通圖 無比經典,肯定是乙個tarjan求橋,刪掉後縮點,變成一顆樹,看看有幾個葉子結點,葉子結點一對對連起來即可 include include include include using namespace std struct edge g...

JZOJ 1244 修建道路

description farmer john最近得到了一些新的農場,他想新修一些道路使得他的所有農場可以經過原有的或是新修的道路互達 也就是說,從任乙個農場都可以經過一些首尾相連道路到達剩下的所有農場 有些農場之間原本就有道路相連。所有n 1 n 1,000 個農場 用1.n順次編號 在地圖上都表...