• 个人简介

    12088

    #include <bits/stdc++.h>
    using namespace std;
    struct edge{
    	int v,w;
    	bool operator<(edge a)const{
    		return w>a.w;
    	}
    };
    int n,m,a,b,w,dis[200001],vis[200001],s;
    priority_queue <edge> q;
    vector<edge> v[200001];
    int main(){
    	cin>>n>>m>>s;
    	for(int i=1;i<=m;i++)cin>>a>>b>>w,v[a].push_back((edge){b,w});
    	for(int i=1;i<=200001;i++)dis[i]=2147483647;
    	dis[s]=0;
    	q.push((edge){s,0});
    	while(!q.empty()){
    		int f=q.top().v;
    		q.pop();
    		if(vis[f]) continue;
    		for(int i=0;i<v[f].size();i++){
    			edge g=v[f][i];
    			if(dis[f]+g.w<dis[g.v])dis[g.v]=dis[f]+g.w,q.push((edge){g.v,dis[g.v]});
    		}
    		vis[f]=true;
    	}
    	for(int i=1;i<=n;i++)cout<<dis[i]<<' ';
    }
    
    #include <iostream>
    #include <cmath>
    #include <queue>
    #include <string.h>
    using namespace std;
    #define int long long
    int n,t;
    int a[105][105];
    int d[105][105][4];
    int xx[4]={-1,0,1,0},yy[4]={0,-1,0,1},cc[4]={0,2,3,1};
    struct node{
    	int w,x,y,c;
    	bool operator<(node a) const{
    		return w>a.w;
    	}
    };
    priority_queue<node> q;
    void dijkstra(){
    	memset(d,127,sizeof(d));
    	d[1][1][3]=0;
    	q.push((node){d[1][1][3],1,1,3});
    	while(!q.empty()){
    		int ux=q.top().x,uy=q.top().y,uc=q.top().c;
    		q.pop();
    		for(int i=0;i<4;i++){
    			int nx=ux+xx[i],ny=uy+yy[i],nc=cc[uc];
    			if(nx<1||nx>n||ny<1||ny>n) continue;
    			int w=0;
    			if(nc==3) w=a[nx][ny];
    			if(d[ux][uy][uc]+t+w<d[nx][ny][nc]){
    				d[nx][ny][nc]=d[ux][uy][uc]+t+w;
    				q.push((node){d[nx][ny][nc],nx,ny,nc});
    			}
    		}
    	}
    }
    signed main(){
    	cin>>n>>t;
    	for(int i=1;i<=n;i++){
    		for(int j=1;j<=n;j++){
    			cin>>a[i][j];
    		}
    	}
    	dijkstra();
    	cout<<min(d[n][n][1],min(d[n][n][2],d[n][n][3]));
    	return 0;
    }