Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 0719281

Browse files
Added problems
1 parent eb34ab5 commit 0719281

File tree

3 files changed

+121
-0
lines changed

3 files changed

+121
-0
lines changed

‎.vscode/settings.json‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"files.associations": {
3+
"cmath": "cpp"
4+
}
5+
}

‎flight_discount.cpp‎

Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
#include <bits/stdc++.h>
2+
3+
using namespace std;
4+
5+
typedef long int li;
6+
typedef long long int lli;
7+
typedef vector<long long int> vlli;
8+
typedef vector<int> vi;
9+
typedef stack<long long int> slli;
10+
typedef pair<lli, lli> plli;
11+
12+
class Graph
13+
{
14+
15+
vector<vector<plli>> adjFor, adjRev;
16+
vector<tuple<lli, lli, lli>> edges;
17+
lli nodes;
18+
19+
public:
20+
Graph(lli nodes)
21+
{
22+
this->adjFor.resize(nodes, vector<plli>{});
23+
this->adjRev.resize(nodes, vector<plli>{});
24+
this->nodes = nodes;
25+
}
26+
27+
void addDirectedEdge(lli src, lli dst, lli weight)
28+
{
29+
30+
if (src == dst)
31+
{
32+
return;
33+
}
34+
35+
this->adjFor[src].emplace_back(make_pair(dst, weight));
36+
this->adjRev[dst].emplace_back(make_pair(src, weight));
37+
this->edges.emplace_back(make_tuple(src, dst, weight));
38+
}
39+
40+
void dijkstra(vector<vector<plli>> &adj, vector<lli> &distance, lli src)
41+
{
42+
priority_queue<plli, vector<plli>, greater<plli>> pq;
43+
distance[src] = 0;
44+
pq.push(make_pair(0, src));
45+
while (!pq.empty())
46+
{
47+
auto top = pq.top();
48+
pq.pop();
49+
if (top.first > distance[top.second])
50+
continue;
51+
for (auto v : adj[top.second])
52+
{
53+
if (distance[v.first] > top.first + v.second)
54+
{
55+
distance[v.first] = top.first + v.second;
56+
pq.push(make_pair(distance[v.first], v.first));
57+
}
58+
}
59+
}
60+
}
61+
62+
void solve()
63+
{
64+
65+
vector<lli> distanceFor(this->nodes, LONG_LONG_MAX);
66+
vector<lli> distanceRev(this->nodes, LONG_LONG_MAX);
67+
68+
this->dijkstra(this->adjFor, distanceFor, 0);
69+
this->dijkstra(this->adjRev, distanceRev, this->nodes - 1);
70+
71+
lli result = LONG_LONG_MAX;
72+
lli src, dst, weight;
73+
74+
for (auto edge : this->edges)
75+
{
76+
tie(src, dst, weight) = edge;
77+
if (distanceRev[dst] == LONG_LONG_MAX || distanceFor[src] == LONG_LONG_MAX)
78+
{
79+
continue;
80+
}
81+
result = min(result, distanceFor[src] + distanceRev[dst] + (lli)floor(weight / 2));
82+
}
83+
cout << result << '\n';
84+
}
85+
};
86+
87+
void task()
88+
{
89+
90+
lli cities, flights;
91+
cin >> cities >> flights;
92+
93+
lli src, dst, weight;
94+
95+
Graph g(cities);
96+
97+
for (lli i = 0; i < flights; i++)
98+
{
99+
cin >> src >> dst >> weight;
100+
g.addDirectedEdge(src - 1, dst - 1, weight);
101+
}
102+
103+
g.solve();
104+
}
105+
106+
int main()
107+
{
108+
109+
ios::sync_with_stdio(0);
110+
cin.tie(0);
111+
112+
task();
113+
114+
return 0;
115+
}

‎graph_algorithms/shortest_routes_I.cpp‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ class Graph
3333
this->adj[src].emplace_back(make_pair(dst, weight));
3434
}
3535

36+
3637
void dijkstra()
3738
{
3839

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /