社区讨论
90分 RE 求助
P5060旅行参与者 4已保存回复 3
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 3 条
- 当前快照
- 1 份
- 快照标识符
- @mi7dwhfo
- 此快照首次捕获于
- 2025/11/20 20:05 4 个月前
- 此快照最后确认于
- 2025/11/20 20:05 4 个月前
RT
不知道最后一个点为什么会RE
各位大佬帮忙看看谢谢
CPP#include "bits/stdc++.h"
#define M 2500010
using namespace std;
int N,n,m,k,start,end,u,v,w,x,size,fee,last[M],f[M],pos[M],heap[M];
int K,to[M],len[M],first[M],next[M];
inline void read(int &x)
{
int s=1;
char ch=0;
x=0;
while(ch^'-'&&!isdigit(ch))
ch=getchar();
if(ch=='-')
{
s=-1;
ch=getchar();
}
while(isdigit(ch))
{
x=(x<<1)+(x<<3)+ch-'0';
ch=getchar();
}
x*=s;
}
void write(int x)
{
if(x<0)
{
putchar('-');
x=-x;
}
if(x>9)
write(x/10);
putchar(x%10+'0');
}
inline void add(int x,int y,int z)
{
K++;
to[K]=y;
len[K]=z;
next[K]=first[x];
first[x]=K;
}
inline void S(int x,int y)
{
swap(pos[heap[x]],pos[heap[y]]);
swap(heap[x],heap[y]);
}
inline void update1(int i)
{
i=pos[i];
while(f[heap[i]]<f[heap[i>>1]])
S(i,i>>1),i>>=1;
}
inline void update2(int i)
{
S(i,size);
heap[size--]=n+1;;
while((i<<1)<=size)
{
if(f[heap[i]]<=f[heap[i<<1]]&&f[heap[i]]<=f[heap[(i<<1)+1]])
break;
if(f[heap[i<<1]]<f[heap[(i<<1)+1]])
S(i,i<<1),i<<=1;
else
S(i,(i<<1)+1),i=(i<<1)+1;
}
}
void print(int x)
{
if(!last[x])
{
write(x);
return;
}
print(last[x]);
putchar('-'),putchar('>');
write((x-1)%N+1);
}
int main()
{
read(N),read(m),read(k),read(start),read(end);
n=N*k;
for(int i=1;i<=m;i++)
{
read(u),read(v),read(w);
add(u,v,w);
}
for(int i=1;i<=n+1;i++)
f[i]=INT_MAX;
f[start]=0;
size=n;
for(int i=1;i<=n;i++)
heap[i]=pos[i]=i;
update1(start);
for(int i=1;i<=n;i++)
{
x=heap[1];
if(x==end)
break;
if(f[x]==INT_MAX)
{
printf("jjc fails in travelling");
return 0;
}
update2(1);
for(int p=first[(x-1)%N+1];p;p=next[p])
{
fee=f[x]+len[p];
w=to[p]+N*(fee%k);
if(f[w]>fee)
{
f[w]=fee;
last[w]=x;
update1(w);
}
}
}
write(f[end]),putchar('\n');
print(end);
return 0;
}
回复
共 3 条回复,欢迎继续交流。
正在加载回复...