1. 程式人生 > >CCF 201609-4 交通規劃_最短路

CCF 201609-4 交通規劃_最短路

CCF 201609-4 交通規劃 傳送門

先放張圖得瑟得瑟, 一遍過, so happy.

這裡寫圖片描述

這是一道描述非常簡單的題目, 看到題目就有點小開心, 覺得肯定能做出來的.

目的很清晰, 所有的點到首都的距離都是最短路, 那麼最短路就要儲存下來捨棄其他無用的邊. 看資料範圍, 就用SPFA演算法了. 中心思想是記錄最短路徑+去除無用邊

關鍵是一條路的最短路可能會有好幾條, 那麼應該怎麼選呢? 如果停留在表面, 會覺得這道題目非常的複雜, 因為選出這些邊, 似乎會影響後面的結果, 到底選哪些邊? 計算機可不知道, 這裡面一定有一個規則.

畫張圖, 仔細觀察後會發現, 一個點可以有幾個出度(也可以有0個), 但是隻會有一個入度. 因為>1的話是無意義的. 那麼很清晰了, 我們選出每個點入邊裡面最短的邊即可, 也就是總共選出n - 1條邊

. 排個序來選就OK.

#include <algorithm>
#include <iostream>
#include <cstring>
#include <vector>
#include <queue>
using namespace std;

struct Node {
    int to, w;
    Node (int t, int w) : to(t), w(w) {}
};

struct Edge {
    int from, to, w;
    Edge (int f, int t, int w) : from(f), to(t), w(w) {}
};

const
int maxn = 10000 + 5; const int INF = 0x3f3f3f3f; vector<Node> G[maxn], last[maxn]; vector<Edge> edge; int inque[maxn] = {}, n, m, dis[maxn], ans = 0; bool cmp(Edge x, Edge y) { if (x.to != y.to) return x.to < y.to; return x.w < y.w; } void SPFA() { queue<int> Q; Q.push(1
); inque[1] = true; dis[1] = 0; while (!Q.empty()) { int now = Q.front(); inque[now] = false; Q.pop(); for (int i = 0; i < G[now].size(); ++i) { int v = G[now][i].to, w = G[now][i].w; if (dis[v] == dis[now] + w) { last[v].push_back(Node(now, w)); } else if (dis[v] > dis[now] + w) { last[v].clear(); last[v].push_back(Node(now, w)); dis[v] = dis[now] + w; if (!inque[v]) { Q.push(v); inque[v] = true; } } } } } int main() { memset(dis, 0x3f, sizeof(dis)); cin >> n >> m; for (int i = 1, u, v, w; i <= m; ++i) { cin >> u >> v >> w; G[u].push_back(Node(v, w)); G[v].push_back(Node(u, w)); } SPFA(); for (int i = 1; i <= n; ++i) { for (int j = 0; j < last[i].size(); ++j) { edge.push_back(Edge(last[i][j].to, i, last[i][j].w)); } } sort(edge.begin(), edge.end(), cmp); int to = 2; for (int i = 0; i < edge.size(); ++i) { if (edge[i].to == to) { ans += edge[i].w; to++; } } cout << ans; }

相關推薦

CCF 201609-4 交通規劃_短路

CCF 201609-4 交通規劃 傳送門 先放張圖得瑟得瑟, 一遍過, so happy. 這是一道描述非常簡單的題目, 看到題目就有點小開心, 覺得肯定能做出來的. 目的很清晰, 所有的點到首都的距離都是最短路, 那麼最短路就要儲存下來捨棄其他無用

CCF-201609-4-交通規劃

這題照樣套模板,但是有個地方要修改。 題目意思是:求最短路徑的同時還要保證這些路徑的總權值最小 在兩條總權值相等的路徑中,經過結點最多的那個最好。你想想,如果我能從原來已有的結點上再加一條到達目標。是不是好過從上一個結點再拉一條呢。兩條總權值相等,結點數相等的路徑,最後一條邊權值越小

CCF 201609-4 交通規劃 (迪傑斯特拉+優先佇列)

這道題我沒有好的思路,剛開始用的是spfa打的,結果不行。 之前沒見過迪傑斯特拉+佇列優化。 但這確實挺好用,。要是最小生成樹跟最短路結合起來的話用這個跑最好不過了。 所以對這道題非常適用。 #include<bits/stdc++.h> using n

ccf 201609-4 交通規劃

dij最短路徑 #include<iostream> #include<vector> using namespace std; class edg{ public:

CCF CSP 201609-4 交通規劃(java)

試題編號:201609-4試題名稱:交通規劃時間限制:1.0s記憶體限制:256.0MB問題描述:問題描述  G國國王來中國參觀後,被中國的高速鐵路深深的震撼,決定為自己的國家也建設一個高速鐵路系統。  建設高速鐵路投入非常大,為了節約建設成本,G國國王決定不新建鐵路,而是將

CCF-交通規劃短路變形->dj演算法)

問題描述   G國國王來中國參觀後,被中國的高速鐵路深深的震撼,決定為自己的國家也建設一個高速鐵路系統。   建設高速鐵路投入非常大,為了節約建設成本,G國國王決定不新建鐵路,而是將已有的鐵路改造

CCF-CSP201609-4 交通規劃(Dijkstra+優先佇列)

題目連結 問題描述 試題編號: 201609-4 試題名稱: 交通規劃 時間限制: 1.0s 記憶體限制: 256.0MB 問題描述: 問題描述   G國國王來中國參觀後,被中國的高速鐵路深深的震撼,決定為自己

CCF 201609-4交通規劃小的短路徑樹 Dijkstra)

題目抽象 要求所有結點與源結點連通,使得所有邊權之和最小。即求最小的最短路徑樹。 大致思路 演算法:通過Dijkstra演算法可以構建最短路徑樹,如何保證這棵樹最小呢?這就需要一些變形了: 每個結點需要記錄它的前驅邊,每次鬆弛的條件是u.d + e ≤ v.d,

CCF 201609-4交通規劃 (圖論--Dijkstra)

CCF 201609-4 交通規劃                                                                   問題描述   G國國王來中國參觀後,被中國的高速鐵路深深的震撼,決定為自己的國家也建設一個高速鐵路系統。

CCF習題 201612-4 交通規劃 (Dijkstra + 貪心)

大體題意: 題意不說了 中文的= = 思路: 既然要求到1的最短距離要存在,我們先用dijkstra演算法求出每一個點到1位置的最短距離,然後在看要哪一些邊! 既然要求路最短 並且包括最短距離,那麼我們可以列舉每一條邊{u,v,w}當這條路就是v到1位置的最短路之一時,我們

CCF201609-4 交通規劃

一個 連接 最小 min cout logs ems 是否 namespace 問題描述   G國國王來中國參觀後,被中國的高速鐵路深深的震撼,決定為自己的國家也建設一個高速鐵路系統。  建設高速鐵路投入非常大,為了節約建設成本,G國國王決定不新建鐵路,而是將已有的鐵路改造

BZOJ_1003_[ZJOI2006]物流運輸_短路+dp

tar 長度 scanf bsp oid wap ems blank tin BZOJ_1003_[ZJOI2006]物流運輸_最短路+dp 題意:http://www.lydsy.com/JudgeOnline/problem.php?id=1003 分析: 這種一段一段

[bzoj1614][Usaco2007Jan]Telephone Lines 架設電話線_二分答案_短路

ret sizeof pan 最短路 front urn main 不用 truct Telephone Lines bzoj-1614 Usaco-2007Jan 題目大意:給你一個n個點m條邊的帶邊權無向圖,求最短路。可以選取k條邊免費。 註釋:$1\le n\le

LOJ#6354. 「CodePlus 2018 4 月賽」短路[短路優化建圖]

題意 一個 \(n\) 個點的完全圖,兩點之間的邊權為 \((i\ xor\ j)*C\) ,同時有 \(m\) 條額外單向路徑,問從 \(S\) 到 \(T\) 的最短路。 \(n\leq 10^5,\ m\leq 5\times 10^5,C\leq 100\). 分析 如果沒有額外的邊,會

ccf201609-4交通規劃

試題編號: 201609-4 試題名稱: 交通規劃 時間限制: 1.0s 記憶體限制: 256.0MB 問題描述: 問題描述   G國國王來中國參觀後,被中國的高速鐵路深深的震撼,決定為自己的國家也建設一個高速鐵路

@loj - [email protected]「CodePlus 2018 4 月賽」短路

目錄 @[email protected] @[email protected] @accepted [email protected] @[email protected] @[email protected] 企鵝國中有 N

CCF201609-4 交通規劃(100分)

試題編號: 201609-4 試題名稱: 交通規劃 時間限制: 1.0s 記憶體限制: 256.0MB 問題描述: 問題描述   G國國王來中國參觀後,被中國的高速鐵路深深的震撼,決定為自己的國家也建設一個高速鐵路系統。   建設高速鐵路投入非常大,

動態規劃_大子陣列|||_1

假設給定陣列共有N個元素,需要找到K個不重合的子陣列使其和最大。令符號(i, j)表示在陣列前i個元素中找到j個不重合的和最大的子陣列的和,符號[a,b]表示在子陣列nums[a,a+1,...,b]中找到一個最大子陣列,返回最大子陣列的和。則有: (i, j)=max

CCCC題集 旅遊規劃短路

題目描述 有了一張自駕旅遊路線圖,你會知道城市間的高速公路長度、以及該公路要收取的過路費。現在需要你寫一個程式,幫助前來諮詢的遊客找一條出發地和目的地之間的最短路徑。如果有若干條路徑都是最短的,那麼需要輸出最便宜的一條路徑。 輸入 輸入說明:輸

「CodePlus 2018 4 月賽」短路

題面 可以發現,如果只留下 i − &gt;