Chào mọi người, em đang làm bài này lâu rồi mà vẫn bị WA :((
đây là link đề: https://oj.vnoi.info/problem/nk05dsrt
ý tưởng của em là sử dụng thuật toán dijkstra từ n để đến 1, có một hàm để tính
em không hiểu ý tưởng hay là code của em bị lỗi chỗ nào mà lại bị Wrong answer, mong anh chị nào xem giúp em với ạ
đây là code của em: https://ideone.com/Vaz5Xi
#include <bits/stdc++.h>
using namespace std;
long long q,m,n=0,c,u,v,w,price[222];
vector<pair<int,long long> >l[222];
struct cmp{
bool operator()(pair<int,long long>x,pair<int,long long>y)
{
return x.second>y.second;
}
};
priority_queue<pair<int,long long>,vector<pair<int,long long> >,cmp>s;
pair<int,long long>tam,temp;
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>q;
while(q--)
{
for(int i=1; i<222; i++)
l[i].clear();
cin>>n>>m>>c;
for(int i=1; i<=n; i++)
price[i]=1e18;
for(int i=1; i<=m; i++)
{
cin>>u>>v>>w;
l[u].push_back({v,w});
l[v].push_back({u,w});
}
price[n]=0;
s.push({n,0});
while(!s.empty())
{
tam=s.top();
s.pop();
if(tam.second!=price[tam.first])continue;
u=tam.first;
for(int i=0; i<l[u].size(); i++)
{
temp=l[u][i];
long long need=tam.second,ca=temp.second;
if(need+ca<=c)temp.second=need+ca;
else
{
if(c<=2*ca)continue;
long long t=(need+ca-c)/(c-2*ca);
if((need+c-ca)%(c-2*ca)!=0)t++;
temp.second=(2*t+1)*ca+need;
}
if(price[temp.first]>temp.second)
{
price[temp.first]=temp.second;
s.push(temp);
}
}
}
cout<<price[1]<<'\n';
}
return 0;
}
nếu được thì có anh/chị nào có thể check giúp code em chưa được ở chỗ nào không ạ?, vì em có đọc qua sol, thấy đúng ý tưởng mà code kiểu gì cũng bị sai kết quả.
em xin cảm ơn trước.