Bzoj4484 Jsoi2015 最小表示

2022-05-13 12:37:20 字數 1698 閱讀 8063

time limit: 20 sec  memory limit: 512 mb

submit: 103  solved: 65

【故事背景】

還記得去年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 佚名上傳

圖論 拓撲排序 bitset

將有向圖拓撲排序,易知每條有向邊只會從拓撲序小的點連向拓撲序大的點。

按照拓撲序倒序處理每乙個點,將當前點指向的所有點按拓撲序從小到大排序,貪心加邊,若當前目標點已經被連通,就不需要加這條邊。

用bitset維護連通性十分方便。

1 #include2 #include3 #include4 #include5 #include6 #include7

using

namespace

std;

8const

int mxn=100010;9

intread()

12while(ch>='

0' && ch<='9')

13return x*f;14}

15struct

edgee[mxn<<1

];18

int hd[mxn],mct=0;19

void add_edge(int u,int

v)22

intq[mxn],hed,tl;

23int

ind[mxn],id[mxn];

24int

n,m;

25void

topo()34}

35}36for(int i=1;i<=tl;i++)id[q[i]]=i;

37return;38

}39int cmp(int a,int

b)42 bitset<30010>b[30010

];43

int st[mxn],top=0;44

int ans=0;45

void

solve()57}

58 printf("

%d\n

",ans);

59return;60

}61intmain()

70topo();

71solve();

72return0;

73 }

bzoj4484 jsoi2015 最小表示

time limit 20 sec memory limit 512 mb submit 432 solved 223 submit status discuss 故事背景 還記得去年jyy所研究的強連通分量的問題嗎?去年的題目裡,jyy研究了對於有向圖的 加邊 問題。對於圖論有著強烈興趣的jyy,...

bzoj4484 JSOI2015 最小表示

給出一張dag,要求刪除盡量多的邊使得連通性不變.即 若刪邊前u到v有路徑,則刪邊後仍有路徑 點數30000,邊數100000.如果從u到v有 u,v 這條邊,且從u到v只有這一條路徑,那麼這條邊必須保留.否則這條邊一定可以刪除.因為如果有不止一條路徑從u到v,必然存在點x x u,x v 使得u可...

小店購物 JSOI2008 BZOJ 2260

grant是乙個個體戶老闆,他經營的小店因為其豐富的優惠方案深受附近居民的青睞,生意紅火。小店的優惠方案十分簡單有趣。grant規定 在一次消費過程中,如果您在本店購買了精製油的話,您購買香皂時就可以享受2.00元 塊的 如果您在本店購買了香皂的話,您購買可樂時就可以享受1.50元 聽的 諸如此類的...