社区讨论

改了一下现在终于不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 条回复,欢迎继续交流。

正在加载回复...