time limit: 3 sec
memory limit: 162 mb
submit: 2943
solved: 1288 [
submit][
status]
很久以前,在乙個遙遠的星系,乙個黑暗的帝國靠著它的超級**統治者整個星系。某一天,憑著乙個偶然的機遇,一支反抗軍摧毀了帝國的超級**,並攻下了星系中幾乎所有的星球。這些星球通過特殊的以太隧道互相直接或間接地連線。 但好景不長,很快帝國又重新造出了他的超級**。憑藉這超級**的力量,帝國開始有計畫地摧毀反抗軍占領的星球。由於星球的不斷被摧毀,兩個星球之間的通訊通道也開始不可靠起來。現在,反抗軍首領交給你乙個任務:給出原來兩個星球之間的以太隧道連通情況以及帝國打擊的星球順序,以盡量快的速度求出每一次打擊之後反抗軍佔據的星球的連通快的個數。(如果兩個星球可以通過現存的以太通道直接或間接地連通,則這兩個星球在同乙個連通塊中)。
輸入檔案第一行包含兩個整數,n (1 <= n <= 2m) 和m (1 <= m <= 200,000),分別表示星球的數目和以太隧道的數目。星球用0~n-1的整數編號。接下來的m行,每行包括兩個整數x, y,其中(0<=x<>y
輸出檔案的第一行是開始時星球的連通塊個數。接下來的n行,每行乙個整數,表示經過該次打擊後現存星球的連通塊個數。
8 13
0 11 6
6 55 0
0 61 2
2 33 4
4 57 1
7 27 6
3 6516
3571
1123
3我還是太弱了,周一花了班會課寫完了程式,但顯然a不了,因為連樣例都沒過,今天週三文科選修課調了一節課的程式終於a了23333333。
下面說一下思路吧
暴力tarjan肯定tle,於是由於是求聯通塊(求聯通塊最好的辦法肯定是無腦並查集啦23333),而一次又只修改乙個點,於是反著做。
先將邊的關係儲存下來,然後再將摧毀星球的順序儲存下來,反著先把該破壞的星球全部破壞的情況求解出來,再反著乙個個將被破壞的星球加上去。
這裡要把 求有多少組聯通塊的演算法要優化一下,否則一次求聯通塊是o(n)會tle,不多說了直接上程式吧2333333
#include
#include
#include
#include
#include
using namespace std;
const int maxn=500000;
struct edge;
int n,m,f[maxn],a[maxn],ans=0,ans2[maxn]=;
bool boom[maxn],b[maxn];
vectoredges;
vectorg[maxn];
void addedge(int from,int to)//建邊,學習白書上網路流建邊的方法233333
int find(int x)//這就不用說了吧。。。。。
void bcj(int t)
for (int i=1;i<=p+1;i++) printf("%d\n",ans2[i]);
return 0;}
2013多校第四場 B題
題意 兩個都含有n個元素的陣列a,b,求 a i b j i j n 的前 m個最小值 m n 解題思路 假定a,b陣列都有序,則我們有下面的結論 a 1 b 1 a 1 b 2 a 1 b n a 2 b 1 a 2 b 2 a 2 b n a n b 1 a n b 2 a n b n 那麼我們...
2023年第九屆藍橋杯B組第四題 摔手機題解
摔手機 摔手機 動態規劃 在藍橋杯的時候遇到一次 當時沒有做對 看了題解也沒明白 如今再次遇到這個類似的題目 於是拿出來補補吧 摔手機題目如下 星球的居民脾氣不太好,但好在他們生氣的時候唯一的異常舉動是 摔手機。各大廠商也就紛紛推出各種耐摔型手機。x星球的質監局規定了手機必須經過耐摔測試,並且評定出...
第七屆藍橋杯b組第四題 快速排序
快速排序 排序在各種場合經常被用到。快速排序是十分常用的高效率的演算法。其思想是 先選乙個 標尺 用它把整個佇列過一遍篩子,以保證 其左邊的元素都不大於它,其右邊的元素都不小於它。這樣,排序問題就被分割為兩個子區間。再分別對子區間排序就可以了。下面的 是一種實現,請分析並填寫劃線部分缺少的 incl...