p6134 [jsoi2015]最小表示
yhx's blog
給定乙個有向圖無環,問最多可以刪去多少條邊使得圖的連通性不變。
首先考慮在什麼情況下會被刪:假設邊\((u,v)\),那麼當且僅當存在乙個\(w\),使得 \(u\) 可以到達 \(w\) ,且 \(w\) 可以到達 \(v\) 。
也就是說我們考慮「繞路」。
但是,我們怎麼知道這個 \(w\) 的存在呢?——我們可以維護每乙個點到其他點的連通性。
但是我們如果遍歷的先後順序有影響呢?不就統計不到了嗎?
所以我們有下面這樣的性質:統計乙個點延伸出去的最長路,然後先訪問最長路長的點。
為什麼呢?——因為長的點有可能到達短的點,而短的點不可能到達長的點。
正確性顯然。
然後有向圖連通性明顯使用 bitset 來優化,時間複雜度 \(o(\frac)\)
**:
#includeusing namespace std;
template inline void read(t &x)
template inline void write(t x)
#define ll long long
const int n=3e4+5,m=1e5+5;
int head[n],nex[m],to[m],idx,vec[n],dist[n];
int n,m,ans;
bool vis[n];
bitsets[n];
void add(int u,int v)
bool cmp(int x,int y)
void dfs(int x)
for(int i=head[x];i;i=nex[i])
sort(vec+1,vec+top+1,cmp);
for(int i=1;i<=top;i++)
return ;
}signed main()
for(int i=1;i<=n;i++) s[i][i]=1;
for(int i=1;i<=n;i++) if(!vis[i]) dfs(i);
write(ans);
return 0;
}
JSOI2015 最小表示
題目大意 盡可能多地去掉乙個有向無環圖上的邊,使得圖的連通性不變。思路 拓撲排序,然後倒序求出每個結點到出度為 0 的點的距離 d 再倒序遍歷每乙個點 x 以 d 為關鍵字對其出邊降序排序,嘗試加入每一條邊,若加邊之前兩點已經連通,則說明這條邊可以刪去。可以用bitset維護圖的連通性,注意原圖是有...
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可...