社区讨论

0tps求调

P11860[CCC 2025 Senior] 熔岩路 / Floor is Lava参与者 3已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@mdb6ohx2
此快照首次捕获于
2025/07/20 12:35
8 个月前
此快照最后确认于
2025/11/04 04:04
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,len,cnt,p[800005],belong[800005],head[800005],d[800005],ans=LONG_LONG_MAX;
bool vis[800005];
struct st{
    int to,nxt;
}edge[800005];
map < int , int > mp[800005];
inline int read()
{
	int x=0,f=1;char ch=getchar();
	while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
	while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
	return x*f;
}
void add(int a,int b,int c){
    if (!mp[b][c]) mp[b][c]=++len;
    edge[++cnt].to=mp[b][c];
    edge[cnt].nxt=head[a];
    head[a]=cnt,p[mp[b][c]]=c,belong[mp[b][c]]=b;
}
int abs(int x,int y){
    return x>y?x-y:y-x;
}
void spfa(){
	for (int i=2;i<=len;i++) d[i]=LONG_LONG_MAX;
	priority_queue<pair<int , int > > q;
	q.push(make_pair(0,1));
	while (q.size()){
		int x=q.top().second;q.pop();
        int u=belong[x];
        if (vis[x]) continue;
        vis[x]=1;
		for (int i=head[u];i;i=edge[i].nxt){
            int y=edge[i].to;
            if (d[x]+abs(p[x],p[y])<d[y]){
                d[y]=d[x]+abs(p[x],p[y]);
                q.push(make_pair(-d[y],y));
            } 
        }
	} 
}
signed main(){
    n=read(),m=read();
    p[++len]=0,belong[len]=1;mp[1][0]=1;
    for (int i=1;i<=n;i++){
        int a=read(),b=read(),c=read();
        add(a,b,c);add(b,a,c);
    }
    spfa();
    for (int i=1;i<=len;i++){
       if (belong[i]==n) ans=min(ans,d[i]);
    }
    cout<<ans;
    return 0;
}

回复

3 条回复,欢迎继续交流。

正在加载回复...