給定一張 \(n\) 個點 \(m\) 條邊的帶邊權連通無向圖,其中有 \(p\) 個點是特殊點。
對於每個特殊點,求出它到離它最近的其它特殊點的距離。
第一行三個整數 \(n,m,p\),第二行 \(p\) 個整數 \(x_1~x_p\) 表示特殊點的編號。接下來 \(m\) 行每行三個整數 \(u,v,w\) 表示一條連線 \(u\) 和 \(v\),長度為 \(w\) 的邊。
輸出一行 \(p\) 個整數,第 \(i\) 個整數表示 \(x_i\) 的答案。
樣例輸入
5 6 3
2 4 5
1 2 4
1 3 1
1 4 1
1 5 4
2 3 1
3 4 3
樣例輸出3 3 5
對於 \(10\%\) 的資料,\(n,m<=50000,p<=10\) 。
對於 \(40\%\) 的資料,\(n,m<=50000\)。
對於另外 \(5\%\) 的資料,\(p=n\)。
對於 \(100\%\) 的資料,\(1<=n,m<=2e5,2<=p<=n,1<=x_i<=n\),\(x_i\) 互不相同,\(1<=u,v<=n,1<=w<=1e9\)。
又是乙個奇奇怪怪的最短路
#include#include#include#include#include#define n 400010
#define r register
#define int long long
using namespace std;
inline int read()
while(ch>='0'&&ch<='9')
return x*f;
}int n,m,p,spl[n],head[n],f[n];
long long ans[n],dis[n];
bool vis[n],flag[n];
struct edgee[n<<1];
int len = 1;
void addedge(int u,int v,int w)
struct node
node(int _num,int _dis)
bool operator <(const node &a)const
};void dij()
while(!q.empty())
} }}signed main()
for(r int i = 1;i <= m;i++)
dij();
fill(ans+1,ans+1+n,1e18);
for(int i = 2;i <= len;i += 2)
} for(int i = 1;i <= p;i++)printf("%lld ",ans[spl[i]]);
return 0;
}
多源最短路
題目描述 已知n個點 n 100 給你n n的方陣,a i,j 表示從第i個點到第j個點的直接距離。現在有q個詢問,每個詢問兩個正整數,a和b,讓你求a到b之間的最短路程。滿足a i,j a j,i 輸入描述 第一行乙個正整數n,接下來n行每行n個正整數,滿足a i,i 0,再一行乙個q,接下來q行...
多源最短路
題目描述 已知n個點 n 100 給你n n的方陣,a i,j 表示從第i個點到第j個點的直接距離。現在有q個詢問,每個詢問兩個正整數,a和b,讓你求a到b之間的最短路程。滿足a i,j a j,i 輸入描述 第一行乙個正整數n,接下來n行每行n個正整數,滿足a i,i 0,再一行乙個q,接下來q行...
多源最短路
時間限制 1 s 空間限制 128000 kb 題目等級 gold 已知n個點 n 100 給你n n的方陣,a i,j 表示從第i個點到第j個點的直接距離。現在有q個詢問,每個詢問兩個正整數,a和b,讓你求a到b之間的最短路程。滿足a i,j a j,i 第一行乙個正整數n,接下來n行每行n個正整...