QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#709938 | #5458. Shortest Path Query | 123456zmy# | WA | 1386ms | 209052kb | C++17 | 3.3kb | 2024-11-04 17:31:34 | 2024-11-04 17:31:34 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
int dp[1024][50011];
long long ans[50011];
int main()
{
memset(dp,0x3f,sizeof(dp));
memset(ans,0x3f,sizeof(ans));
int n,m;
scanf("%d%d",&n,&m);
// n=50000,m=100000;
vector<vector<pair<int,int>>>to(n+1);
for(int i=1,u,v,w;i<=m;i++)
{
scanf("%d%d%d",&u,&v,&w);
// u=(i+1)/2,v=(i+1)/2+1,w=i&1;
to[v].emplace_back(u,w);
}
int q;
scanf("%d",&q);
// q=50000;
// vector<long long>ans(q+1,0x3f3f3f3f);
vector<vector<pair<pair<int,int>,int>>>query(n+1);
for(int i=1,a,b,x;i<=q;i++)
{
scanf("%d%d%d",&a,&b,&x);
// a=rand()%10000+1,b=rand()%10000+1,x=rand()%n+1;
query[x].push_back({{a,b},i});
}
vector<int>mx(n+1);
dp[1][0]=0;
for(int i=2;i<=n;i++)
{
for(auto tmp:to[i])mx[i]=max(mx[i],mx[tmp.first]+tmp.second);
// memset(&dp[i_][0],0x3f,sizeof(int)*(mx[i]+10));
for(auto tmp:to[i])
{
int u=tmp.first,w=tmp.second;
int i_=i&1023,u_=u&1023;
if(w)
{
for(int j=0;j<=mx[u];j+=8)
{
dp[i_][j+1]=min(dp[i_][j+1],dp[u_][j]);
dp[i_][j+2]=min(dp[i_][j+2],dp[u_][j+1]);
dp[i_][j+3]=min(dp[i_][j+3],dp[u_][j+2]);
dp[i_][j+4]=min(dp[i_][j+4],dp[u_][j+3]);
dp[i_][j+5]=min(dp[i_][j+5],dp[u_][j+4]);
dp[i_][j+6]=min(dp[i_][j+6],dp[u_][j+5]);
dp[i_][j+7]=min(dp[i_][j+7],dp[u_][j+6]);
dp[i_][j+8]=min(dp[i_][j+8],dp[u_][j+7]);
}
}
else
{
for(int j=0;j<=mx[u];j+=8)
{
dp[i_][j]=min(dp[i_][j],dp[u_][j]+1);
dp[i_][j+1]=min(dp[i_][j+1],dp[u_][j+1]+1);
dp[i_][j+2]=min(dp[i_][j+2],dp[u_][j+2]+1);
dp[i_][j+3]=min(dp[i_][j+3],dp[u_][j+3]+1);
dp[i_][j+4]=min(dp[i_][j+4],dp[u_][j+4]+1);
dp[i_][j+5]=min(dp[i_][j+5],dp[u_][j+5]+1);
dp[i_][j+6]=min(dp[i_][j+6],dp[u_][j+6]+1);
dp[i_][j+7]=min(dp[i_][j+7],dp[u_][j+7]+1);
}
}
}
for(auto tmp:query[i])
{
long long a=tmp.first.first,b=tmp.first.second,l=tmp.second;
int i_=i&1023;
for(int j=0;j<=mx[i];j+=8)
{
ans[l]=min(ans[l],b*j+a*dp[i_][j]);
ans[l]=min(ans[l],b*(j+1)+a*dp[i_][j+1]);
ans[l]=min(ans[l],b*(j+2)+a*dp[i_][j+2]);
ans[l]=min(ans[l],b*(j+3)+a*dp[i_][j+3]);
ans[l]=min(ans[l],b*(j+4)+a*dp[i_][j+4]);
ans[l]=min(ans[l],b*(j+5)+a*dp[i_][j+5]);
ans[l]=min(ans[l],b*(j+6)+a*dp[i_][j+6]);
ans[l]=min(ans[l],b*(j+7)+a*dp[i_][j+7]);
}
}
}
for(auto tmp:query[1])ans[tmp.second]=0;
long long anss=0;
for(int i=1;i<=q;i++)//anss^=ans[i];//
printf("%lld\n",ans[i]);
// printf("%d %d\n",anss,clock());
return 0;
}
/*
4 4
1 2 0
1 3 1
2 4 0
3 4 1
3
3 5 2
3 2 4
2 3 4
*/
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 7ms
memory: 204484kb
input:
4 4 1 2 0 1 3 1 2 4 0 3 4 1 3 3 5 2 3 2 4 2 3 4
output:
3 4 4
result:
ok 3 number(s): "3 4 4"
Test #2:
score: -100
Wrong Answer
time: 1386ms
memory: 209052kb
input:
50000 100000 1 2 1 2 3 0 3 4 1 4 5 0 5 6 1 6 7 0 7 8 1 8 9 1 9 10 0 10 11 1 11 12 1 12 13 1 13 14 0 14 15 0 15 16 0 16 17 0 17 18 1 18 19 1 19 20 0 20 21 1 21 22 0 22 23 0 23 24 1 24 25 1 25 26 0 26 27 1 27 28 0 28 29 0 29 30 0 30 31 0 31 32 1 32 33 0 33 34 1 34 35 1 35 36 1 36 37 1 37 38 0 38 39 0 ...
output:
2374170 2947736 3303629 3606813 1241460 142323 638606 424451 284433 3373930 601625 1163932 3696304 2421832 2905288 1394292 1010585 703265 2322025 577862 777555 2840310 2612136 2608497 4123130 2324028 2424141 1304136 895512 3896781 1894617 3770016 1020682 1783908 512001 2946674 1685745 3025669 372553...
result:
wrong answer 1st numbers differ - expected: '164602050', found: '2374170'