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 #include7using
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元 聽的 諸如此類的...