社区讨论

分层图求调……

P8724[蓝桥杯 2020 省 AB3] 限高杆参与者 3已保存回复 4

讨论操作

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

当前回复
4 条
当前快照
1 份
快照标识符
@lo1mfl0z
此快照首次捕获于
2023/10/22 23:26
2 年前
此快照最后确认于
2023/11/03 00:10
2 年前
查看原帖
80 pts
WA on #5 #9
CPP
#include<cstdio>
#include<queue>
using namespace std;
inline int in(){
	int x=0,f=1;char c;
	c=getchar();
	while (c<'0'||c>'9'){
		if (c=='-')f=-1;
		c=getchar();
	}
	while (c>='0'&&c<='9'){x=(x<<3)+(x<<1)+(c^48);c=getchar();}
	return x*f;
}
struct edge{int to,nex,dis;}w[4000001];
int head[4000001],id,n,m,dis[4000001];
bool vis[4000001];
inline void add(int u,int v,int d){
    w[++id].dis=d;
   	w[id].to=v;
    w[id].nex=head[u];
    head[u]=id;
}
struct node{
    long long dis;int pos;
    bool operator<(const node &x)const{return x.dis<dis;}
};
priority_queue<node> q;
inline void dijkstra(){
    for (int i=3*n;i>=1;i--)dis[i]=1e9;
    dis[1]=0;q.push({0,1});
    while(!q.empty()){
        int x=q.top().pos;
        q.pop();
        if(vis[x])continue;
        vis[x]=1;
        for (int i=head[x];i;i=w[i].nex){
            int y=w[i].to;
            if(dis[y]>dis[x]+w[i].dis){
            	dis[y]=dis[x]+w[i].dis;
                q.push({dis[y],y});
            }
        }
    }
}
int main(){
    n=in(),m=in();
    while (m--){
    	int u=in(),v=in(),d=in(),w=in();
        if (w==1){
			add(u,v+n,d);add(v,u+n,d);
			add(u+n,v+n+n,d);add(v+n,u+n+n,d);
		}
		else {
			add(u,v,d);add(v,u,d);
			add(u+n,v+n,d);add(v+n,u+n,d);
			add(u+n,v+n+n,d);add(v+n,u+n+n,d);
		}
    }
    dijkstra();
    printf ("%d",dis[n]-min(dis[n],min(dis[n+n],dis[n+n+n])));
    return 0;
}

回复

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

正在加载回复...