CCF 201609-4 交通規劃_最短路
CCF 201609-4 交通規劃 傳送門
先放張圖得瑟得瑟, 一遍過, so happy.
這是一道描述非常簡單的題目, 看到題目就有點小開心, 覺得肯定能做出來的.
目的很清晰, 所有的點到首都的距離都是最短路, 那麼最短路就要儲存下來捨棄其他無用的邊. 看資料範圍, 就用SPFA演算法了. 中心思想是記錄最短路徑+去除無用邊
關鍵是一條路的最短路可能會有好幾條, 那麼應該怎麼選呢? 如果停留在表面, 會覺得這道題目非常的複雜, 因為選出這些邊, 似乎會影響後面的結果, 到底選哪些邊? 計算機可不知道, 這裡面一定有一個規則.
畫張圖, 仔細觀察後會發現, 一個點可以有幾個出度(也可以有0個), 但是隻會有一個入度. 因為>1的話是無意義的. 那麼很清晰了, 我們選出每個點入邊裡面最短的邊即可, 也就是總共選出n - 1條邊
#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 − >