用 Floyd+O2 水过去后就想用 dijkstra 打个快一点的解法,结果 RE 了,交了快 4 页了,求大佬帮助!
#include <iostream>
using namespace std;
int main(){
const int inf = 70002;
int e[502][502],n,m,t,c,f[502],dis[502];
cin >> n >> m >> t >> c;
for(int i = 1;i <= n;i++)
for(int j = 1;j <= n;j++)
e[i][j] = i == j ? 0 : inf;
for(int i = 1;i <= m;i++){
int t1,t2,t3;
cin >> t1 >> t2 >> t3;
e[t1][t2] = min(t3,e[t1][t2]);
e[t2][t1] = min(t3,e[t2][t1]);
}
for(int i = 1;i <= n;i++)
dis[i] = e[i][1];
f[1] = 1;
for(int i = 1;i <= n;i++){
int minn = inf,u;
for(int j = 1;j <= n;j++)
if(f[j] == 0 && dis[j] < minn)
minn = dis[j],u = j;
f[u] = 1;
for(int j = 1;j <= n;j++)
if(f[j] == 0)
dis[j] = min(dis[j],dis[u] + e[j][u]);
}
int a[501],t2 = 0;
for(int i = 1;i <= t;i++){
int x;
cin >> x;
if(dis[x] <= c)
t2++,a[t2] = i;
}
cout << t2 << endl;
for(int i = 1;i <= t2;i++)
cout << a[i] << endl;
return 0;
}