給出乙個 \(n\) 個點 \(m\) 條邊的無向圖,經過乙個點的代價是進入和離開這個點的兩條邊的邊權的較大值,求從起點 1 到點 \(n\) 的最小代價。起點的代價是離開起點的邊的邊權,終點的代價是進入終點的邊的邊權。
範圍&性質:\(1\le n\le 10^5,1\le m\le 2\times 10^5\)
暴力做法:
由於圖的權值在點上,所以考慮建一張新的圖,將點權化作邊權,相鄰兩邊之間連一條新的邊,最劣情況下空間複雜度會達到\(o(m^2)\)
優化:結合點的權值取決於入邊和出邊的最大值的性質,可以利用差分思想降低總邊數:
(我們規定新圖中點\(i\)的出邊記作\(p_i\),入邊記作\(p_\))
將原圖中每乙個點的入邊和出邊按照權值分別從小到大排序
對於原圖中的邊\(e_i\),即新圖中的\(p_i\),向\(p_\)連一條費用為二者之差的邊,再從\(p_\)向\(p_i\)連一條費用為0的邊
對於每個\(p_i\),向權值比它大的最小的\(p_\)連一條邊,費用為\(p_\)的權值,再從權值比\(p_i\)小的最大的\(p_\)向\(p_i\)連一條邊,費用為\(p_i\)的費用
這樣建圖的效果是:倘若出邊的費用小於入邊,則費用就取決於入邊,因為新圖中權值大的點通向權值小的點是免費的,反之則需要通過差額補足,總邊數便降到\(m\)級別。
#includeusing namespace std;
namespace zzc
e[maxm];
struct old_graph
bool operator <(const old_graph &b)const
};vectorp[maxn];
priority_queueq;
void add(int u,int v,long long w)
long long dis[maxn];
long long dijkstra()
}} }
void work()
ed=cnt+1;
for(int i=1;i<=n;i++)
if(pos}
} int len=p[1].size();
for(int i=0;ilen=p[n].size();
for(int i=0;iprintf("%lld\n",dijkstra()); }
}int main()
簡述CMMI2級的7個PA
乙個處於 無序化 生產的軟體公司,要進行過程改進,首要是改進什麼呢?做任何事情都需要計畫,做軟體開發這樣複雜的工作更加需要計畫,所以2級中有專案計畫 pp 以及專案計畫跟蹤與控制 pmc 兩個pa,分別對指定計畫以及計畫的執行給出了詳細的標準。人是會死的,需求是會變的。需求變更是每個軟體公司最頭疼的...
2 1 CMMI2級 7個PA簡述
摘要 階段式的cmmi沒有1級,最開始的級別就是2級。乙個處於 無序化 生產的軟體公司,要進行過程改進,首要是改進什麼呢?2級告訴你,我們需要從計畫 計畫跟蹤 需求管理 採購 度量 配置管理 質量保證入手!正文 乙個處於 無序化 生產的軟體公司,要進行過程改進,首要是改進什麼呢?做任何事情都需要計畫...
認識P2P,利用P2P
是peer to peer的縮寫 好象還看到過文章說是point to point,我也不清楚,網上的資料也不清楚,鬱悶 peer在英語裡有 地位 能力等 同等者 同事 和 夥伴 等意義。這樣一來,p2p也就可以理解為 夥伴對夥伴 的意思,或稱為對等聯網。目前人們認為其在加強網路上人的交流 檔案交換...