又來吐吐糟啦。。。
今天還算順利,總共刷出了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...