許久未更新,今天做到一道有意思的題目,先上圖,然後細說
這道題大體意思是給定一張無向圖,其邊權為正,要你求出總代價最小的生成樹,生成樹上
每條邊 v(e)的代價為 w(e)*s(j),w(e)為邊(i,j)的權值,s(j)是 對於 j 節點所在子樹的節點
數總和。
題解:該題看起來是最小生成樹的題目,實際上只需從頂點跑一遍最短路後,然後將頂點到每個點的最短
路之和相加即可。
同時還可以拓展下,假設頂點不是固定的,只需對每個點跑一遍最短路演算法,然後找出最短路總和
最小的那個頂點,輸出該頂點最短路之和。
隨後附上ac**:
#include using namespace std;
using namespace std;
const int maxn=50007;
struct edgee[maxn<<1]; //鄰接表要開兩倍
int p[maxn],n,m,eid,dist[maxn],r[maxn];
bool vst[maxn];
void init()
typedef pairpii;
set> min_heap; //second:頂點下標 first:該頂點dist值
bool dij(int s)}}
//n個點都可以從源點到達 返回true
return true;
}void ins(int u,int v,int w)
void ins2(int u,int v,int w)
int main()
if(dij(1))
else printf("no answer");
return 0;
}
計蒜客 電能傳輸 最短路
在嘟嘟生活的王國有 n 座城市,某些城市之間有傳輸電能的線路。在某條線路傳輸電能是會有損耗的,某乙個城市在某一時間只可以向另外乙個城市傳輸電能。已知在城市 s 存在 m 千瓦時電能,求將這些電能都傳輸到城市 t 至少需要損耗多少電能。輸入包含多組測試資料,對於每組測試資料 第一行包含乙個整數 n 0...
計蒜客 熱愛工作的蒜蒜(最短路)
題目鏈結 time limit 1000ms memory limit 262144k 眾所周知,蒜蒜是一名熱愛工作的好員工,他覺得時間就是金錢,做事情總是爭分奪秒。這天晚上,蒜蒜乙個人去吃晚飯。不巧的是,吃完飯以後就開始下雨了,蒜蒜並沒有帶雨傘出來。但是蒜蒜熱愛工作,工作使他快樂,他要盡快趕回去寫...
計蒜客習題 朋友
在社交的過程中,通過朋友,也能認識新的朋友。在某個朋友關係圖中,假定 a 和 b 是朋友,b 和 c 是朋友,那麼 a 和 c 也會成為朋友。即,我們規定朋友的朋友也是朋友。現在,已知若干對朋友關係,詢問某兩個人是不是朋友。請編寫乙個程式來解決這個問題吧。輸入格式 第一行 三個整數 n,m,p n ...