還是一道很簡單的基礎題,就是乙個最短路徑樹的型別題目
我們首先可以發現這棵樹必定滿足從1出發到其它點的距離都是原圖中的最短路
換句話說,這棵樹上的每一條邊都是原圖從1出發到其它點的最短路上的邊
那麼直接跑最短路,spfa,不存在的?我只信dj,然後記錄那些邊在最短路上
然後直接跑mst即可。是不是很經典的水題
然後我又莫名拿了rank1(沒辦法天生自帶小常數)
code
#include#include#include#include#includeusing namespace std;
typedef long long ll;
const int n=3e5+5;
struct edge
e[n<<1];
struct heap
inline void read(int &x)
inline void double_add(int x,int y,int z)
inline bool cmp(data a,data b)
); }
} memset(vis,0,sizeof(vis));
for (i=1;i<=cnt;++i)
if (dis[e[i].from]+1ll*e[i].v==dis[e[i].to]) a[++tot]=(data);
return printf("%lld",mst()),0;
}
51nod 1443 路徑和樹 單元最短路徑
分析 很容易想到先搞一遍單源最短路徑,然後只保留最短路徑上的邊,接下來容易想到最小生成樹,但是因為有的邊只刪了乙個方向,所以變成了有向圖了,要求的就是最小樹形圖,比較麻煩而且容易t。實際上,考慮在連好的圖裡加乙個點,肯定是加連向它的最短邊,類似貪心的思路,所以結果就是刪完後的圖中,每個點的最小前驅邊...
51nod 1610 路徑計數
原題連線 考慮不同權重為 d 的倍數的邊組成的圖.f d 為此圖中。路徑總數量。由於m 50000 明顯會出現重邊。建議限制邊的數量或者使用鄰接矩陣存圖。矩陣更為方便。由於最初沒有考邊過多。使用了鍊錶 拓撲排序。量較大。include include include include define m...
51Nod1967 路徑定向
給出乙個有向圖,要求給每條邊重定向,使得定向後出度等於入度的點最多,輸出答案和任意一種方案 input 第一行兩個正整數n,m,表示1 n號點與m條邊 接下來m行,每行兩個正整數xi,yi,表示存在一條有向邊從xi指向yi n 10 5,m 3 10 5,xi,yi n output 第一行乙個整數...