24 7 2012 ICPC培訓 第九天

2021-06-08 00:09:12 字數 1718 閱讀 1651

又來吐吐糟啦。。。

今天還算順利,總共刷出了5題。

前兩題是並查集,就是昨天沒搞定的

簡單說說這幾題吧。

關於並查集的兩題其實都是卡在了路徑壓縮的處理上。很坑爹的說。其實也就是在路徑壓縮時

利用陣列記錄下一些資訊。在需要的時候在合理的計算出來。

其實,挺難理解的

我也只是一知半解了。。。

第一題(hdu1829)

主要是判斷兩個人是否在同一連通分量的同一層次上。那個計算層次的兩個公式,較難理解。

**:

#include#includeusing namespace std;

const int maxn=2001;

int father[maxn],layer[maxn],numbug,actionbug;

bool flag;

void init()

}int find(int x)

return father[x];

}void combine(int x,int y)

else

}void deal()

}

int main()

system("pause");

return 0;

}

第二題(hdu3635)

這題的難點在於求ball的轉移次數。

暴力解法是每次q a時都暴力找到和a同祖先的ball,然後把轉移次數加一,o(n^2)的演算法,tle了。

另外的解法就是在路徑壓縮時利用路徑壓縮的特點來解,難點也就是這個了。

如果你是我的祖先,你的轉移次數加上我的轉移次數才是我的轉移次數,否則你早已不是我的祖先

了。只有直接轉移祖先路徑才不會被壓縮,否則壓縮。

**:

#include#includeusing namespace std;

const int maxn=10001;

int father[maxn];

int transport[maxn];

int numball[maxn];

int n,k,t=1;

int find(int x)

return father[x];

//if(x==father[x])

////return father[x]=find(father[x]);

}void combine(int x,int y)

void init()

} void inputandquary()

;vectormyv[maxn]; //利用臨界表儲存圖

int numroad,numfrom,numto; //路徑數、可以開始的地點數、想去的地點數

int minpath[maxn],canfrom[maxn],wantto[maxn]; //最短路、可以出發的城市、想去的城市

bool inq[maxn]; //是否入隊

/* 有bug的函式

bool judgeexistandsmall(int a,int b,int time)}}

if(flag)}}

if(flagsmall) //雙向圖,只有存在的路徑更小才需要處理 }}

inq[now]=false;

}for(int kk=0;kk

最後,到這麼晚才寫實在不好意思。

看電視的說

ICPC編碼建議

寫 最重要的是清晰,包括思路的清晰和 結構的清晰。我們無法保證寫的 一定是正確的,但我們可以保證自己是在頭腦清晰的情況下書寫,並且通過不斷的練習,用更加清晰的 結構實現。越清晰,程式就越可能正確,並且即使出錯也很容易看到問題。0 在能過題的情況下,最樸素最好寫的方式就是最好的。1 double x ...

ICPC練習 2021ICPC亞洲區域賽南京

感覺刷cf遇到了一點瓶頸,開啟真題練習計畫。比賽鏈結 a比較簡單的構造,上下和左右分開,乙個方向先用n 1次移動到距離目標更近的一段端點再同步移動。保證小於3 n 1 次 c考慮到答案是乙個數 乙個數 k 那麼我們掃過去的時候記錄一下哪個時候這兩個數的差分最大,通過這個差分調大某乙個數的個數 差分是...

ICPC程式設計題解系列

the 2019 acm icpc china shannxi provincial programming contest題解 海島blog csdn部落格 2019 icpc中國邀請賽 南昌 暨國際絲綢之路程式設計競賽 網路賽題解 海島blog csdn部落格 2018 2019 acm icp...