zoukankan      html  css  js  c++  java
  • 51NOD 1459 迷宫游戏

    给定一个图, 起点以及终点, 每一条边有两个参数 (dis) , 每个点有一个参数 (v) 求在保证最短路以及最短路情况下的最大 (sum v)

    Solution

    看了直播水一发
    这是一个多关键字的最短路(不过第二关键字为点权)
    那就算复习最短路啦
    其做法是跑最短路, 在得到相同最短路长度的时候更新到此点最大 (v)
    然而这题有一个说法: 每个点权只能取得一次
    因为边权全部为正, 不存在负环, 因此一个点不可能经过两次
    故正确性得到确认

    Code

    #include<iostream>
    #include<cstdio>
    #include<queue>
    #include<cstring>
    #include<algorithm>
    #define LL long long
    using namespace std;
    int RD(){
        int out = 0,flag = 1;char c = getchar();
        while(c < '0' || c >'9'){if(c == '-')flag = -1;c = getchar();}
        while(c >= '0' && c <= '9'){out = out * 10 + c - '0';c = getchar();}
        return flag * out;
        }
    const int maxn = 100019,INF = 1e9 + 19;
    int head[maxn],nume = 1;
    struct Node{
        int v,dis,nxt;
        }E[maxn << 3];
    void add(int u,int v,int dis){
        E[++nume].nxt = head[u];
        E[nume].v = v;
        E[nume].dis = dis;
        head[u] = nume;
        }
    int num, nr, s, t;
    int d[maxn], val[maxn], ori[maxn];
    bool inq[maxn];
    void SPFA(int s){
    	for(int i = 0;i <= num;i++)d[i] = INF;
    	queue<int>Q;
    	d[s] = 0, val[s] = ori[s];
    	Q.push(s);
    	inq[s] = 1;
    	while(!Q.empty()){
    		int u = Q.front();Q.pop();inq[u] = 0;
    		for(int i = head[u];i;i = E[i].nxt){
    			int v = E[i].v, dis = E[i].dis;
    			if(d[u] + dis < d[v]){
    				d[v] = d[u] + dis;
    				val[v] = val[u] + ori[v];
    				if(!inq[v])Q.push(v), inq[v] = 1;
    				}
    			else if(d[u] + dis == d[v]){
    				val[v] = max(val[v], val[u] + ori[v]);
    				}
    			}
    		}
    	}
    int main(){
    	num = RD(), nr = RD(), s = RD(), t = RD();
    	for(int i = 0;i < num;i++)ori[i] = RD();
    	for(int i = 1;i <= nr;i++){
    		int u = RD(), v  = RD(), dis = RD();
    		add(u, v, dis), add(v, u, dis);
    		}
    	SPFA(s);
    	printf("%d %d
    ", d[t], val[t]);
    	return 0;
    	}
    
  • 相关阅读:
    城市的划入划出效果
    文本溢出省略解决笔记css
    长串英文数字强制折行解决办法css
    Poj 2352 Star
    树状数组(Binary Indexed Trees,二分索引树)
    二叉树的层次遍历
    Uva 107 The Cat in the Hat
    Uva 10336 Rank the Languages
    Uva 536 Tree Recovery
    Uva10701 Pre, in and post
  • 原文地址:https://www.cnblogs.com/Tony-Double-Sky/p/9593980.html
Copyright © 2011-2022 走看看