社区讨论
改了一下现在终于不T啦!!!但是..........
P4366[Code+#4] 最短路参与者 2已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @mi6y4pcs
- 此快照首次捕获于
- 2025/11/20 12:43 4 个月前
- 此快照最后确认于
- 2025/11/20 12:43 4 个月前
RT,求大佬看看,感谢不尽QAQ
CPP#include<bits/stdc++.h>
using namespace std;
#define maxn 1000100
int n,m,c,t,dis[maxn],x,head[maxn],v[maxn],w[maxn],to[maxn],next[maxn],start,end;
inline void add(int i,int j,int v)
{
next[++t]=head[i];
to[t]=j;
w[t]=v;
head[i]=t;
}
struct node{
int now,value;
bool operator<(const node &A) const{return A.value<value;}
};
priority_queue<node> q;
int main()
{
scanf("%d%d%d",&n,&m,&c);
int y,u,p;
for(int i=1;i<=m;i++)
scanf("%d%d%d",&y,&u,&p),add(y,u,p);
for(int i=0;i<=n;i++)
for(int j=1;j<=n&&((i^j))<=n;j++)
add(i,i^j,j*c),add(i^j,i,j*c);
scanf("%d%d",&start,&end);
memset(dis,0x3f3f3f3f,sizeof(dis));
dis[start]=0;
q.push((node){start,0});
while(!q.empty())
{
node now=q.top();q.pop();
int x=now.now,v=now.value;
if(v!=dis[x]) continue;
for(int i=head[x];i;i=next[i])
{
int v=w[i],y=to[i];
if(dis[x]+v<dis[y])
{
dis[y]=dis[x]+v;
q.push((node){y,dis[y]});
}
}
}
printf("%d",dis[end]);
return 0;
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...