time limit:
20 sec memory limit:
512 mb
submit:
432 solved:
223[submit][status][discuss]【故事背景】
還記得去年jyy所研究的強連通分量的問題嗎?去年的題目裡,jyy研究了對於有向圖的「加邊」問題。對於圖論有著強烈興趣的jyy,今年又琢磨起了「刪邊」的問題。
【問題描述】
對於乙個n個點(每個點從1到n編號),m條邊的有向圖,jyy發現,如果從圖中刪去一些邊,那麼原圖的連通性會發生改變;而也有一些邊,刪去之後圖的連通性並不會發生改變。
jyy想知道,如果想要使得原圖任意兩點的連通性保持不變,我們最多能刪掉多少條邊呢?
為了簡化一下大家的工作量,這次jyy保證他給定的有向圖一定是乙個有向無環圖(jyy:大家經過去年的問題,都知道對於給任意有向圖的問題,最後都能轉化為有向無環圖上的問題,所以今年jyy就乾脆簡化一下大家的工作)。
輸入一行包含兩個正整數n和m。
接下來m行,每行包含兩個1到n之間的正整數x_i和y_i,表示圖中存在一條從x_i到y_i的有向邊。
輸入資料保證,任意兩點間只會有至多一條邊存在。
n<=30,000,m<=100,000
輸出一行包含乙個整數,表示jyy最多可以刪掉的邊數。
5 61 2
2 33 5
4 51 5
1 32
by 佚名上傳
[submit][status][discuss]
題解 :
cmp函式:不加型別的話本地不會編譯錯誤,(il好像也是);
刪邊互相之間是無影響的,所以可刪就刪,和順序無關;
由於沒有重邊的無環dag,一條邊可刪即這條邊的u,v有另一種方式到達;
dag轉成topsort序列,bitset優化n*m連通性dp
$o( \frac + m*logm)$
//畢姥爺說得對,還是寫一下的好,不然連bitset的空間都不會開(和vector一樣);
20181031
1 #include2 #include3 #include4 #include5 #include6 #include7 #include8 #include9 #include10 #include11view code#define rg register
12#define il inline
13#define run(i,l,r) for(int i=l;i<=r;i++)
14#define don(i,l,r) for(int i=l;i>=r;i--)
15#define ll long long
16#define ld long double
17#define inf 0x3f3f3f3f
18using
namespace
std;
19const
int n=30001 , m=100010
;20 bitsetf[n];
21int
n,m,o,hd[n],st[n],id[n],d[n],idx,q[n],t,w;
22 vectorg[n];
23char
gc()
28int
rd()
34 il bool cmp(const
int &a,const
int &b)
35 il void
topsort()45}
46}47}
48int
main()
57topsort();
58for(rg int i=1;i<=n;i++)
61int ans=0;62
for(rg int i=n;i;i--)else72}
73}74 cout
75return0;
76 }//
by tkys_austin;
bzoj4484 JSOI2015 最小表示
給出一張dag,要求刪除盡量多的邊使得連通性不變.即 若刪邊前u到v有路徑,則刪邊後仍有路徑 點數30000,邊數100000.如果從u到v有 u,v 這條邊,且從u到v只有這一條路徑,那麼這條邊必須保留.否則這條邊一定可以刪除.因為如果有不止一條路徑從u到v,必然存在點x x u,x v 使得u可...
Bzoj4484 Jsoi2015 最小表示
time limit 20 sec memory limit 512 mb submit 103 solved 65 故事背景 還記得去年jyy所研究的強連通分量的問題嗎?去年的題目裡,jyy研究了對於有向圖的 加邊 問題。對於圖論有著強烈興趣的jyy,今年又琢磨起了 刪邊 的問題。問題描述 對於乙...
小店購物 JSOI2008 BZOJ 2260
grant是乙個個體戶老闆,他經營的小店因為其豐富的優惠方案深受附近居民的青睞,生意紅火。小店的優惠方案十分簡單有趣。grant規定 在一次消費過程中,如果您在本店購買了精製油的話,您購買香皂時就可以享受2.00元 塊的 如果您在本店購買了香皂的話,您購買可樂時就可以享受1.50元 聽的 諸如此類的...