C. Surely You Congest
2013 World Finals St. Petersburg HOSTED BY ITMO Problem C Surely You Congest Time Limit: 10 seconds You are in charge of designing an advanced centralized traffic management system for smart cars. The goal is to use global information to instruct morning...
Problem Statement
Formatted from the contest statement text, with sample tests broken out into copyable blocks.
You are in charge of designing an advanced centralized traffic management system for smart cars. The goal is to use global information to instruct morning commuters, who must drive downtown from the suburbs, how best to get to the city center while avoiding traffic jams. Unfortunately, since commuters know the city and are selfish, you cannot simply tell them to travel routes that take longer than normal (otherwise they will just ignore your directions). You can only convince them to change to different routes that are equally fast. The city’s network of roads consists of intersections that are connected by bidirectional roads of various travel times. Each commuter starts at some intersection, which may vary from commuter to commuter. All commuters end their journeys at the same place, which is downtown at intersection 1. If two com- muters attempt to start travelling along the same road in the same direction at the same time, there will be congestion; you must avoid this. However, it is fine if two commuters pass through the same intersection simultaneously or if they take the same road starting at different times. Determine the maximum number of commuters who can drive downtown without congestion, subject to all commuters starting their journeys at exactly the same time and without any of them taking a suboptimal route.
Figure C.1: Illustration of Sample Input 2.
In Figure C.1, cars are shown in their original locations. One car is already downtown. Of the cars at in- tersection 4, one can go along the dotted route through intersection 3, and another along the dashed route through intersection 2. But the remaining two cars cannot reach downtown while avoiding congestion. So a maximum of 3 cars can reach downtown with no congestion.
Input
The input consists of a single test case. The first line contains three integers n, m, and c, where n (1 ≤ n ≤ 25 000) is the number of intersections, m (0 ≤ m ≤ 50 000) is the number of roads, and c (0 ≤ c ≤ 1 000) is the number of commuters. Each of the next m lines contains three integers xi , yi , and ti describing one road, where xi and yi (1 ≤ xi , yi ≤ n) are the distinct intersections the road connects, and ti (1 ≤ ti ≤ 10 000) is the time it takes to travel along that road in either direction. You may assume
ICPC 2013
2013 World Finals
St. Petersburg
HOSTED BY ITMO
that downtown is reachable from every intersection. The last line contains c integers listing the starting intersections of the commuters.
Output
Display the maximum number of commuters who can reach downtown without congestion.
Sample Tests
3 3 2
1 2 42
2 3 1
2 3 1
2 3 2 4 4 5
1 2 5
1 3 4
4 2 5
4 3 6
4 4 4 4 1 3 Editorial
The solution write-up is rendered from the LaTeX source, with equations kept live through MathJax.
Key Observations
Write the structural observations that make the problem tractable.
State any useful invariant, monotonicity property, graph interpretation, or combinatorial reformulation.
If the constraints matter, explain exactly which part of the solution they enable.
Algorithm
Describe the data structures and the state maintained by the algorithm.
Explain the processing order and why it is sufficient.
Mention corner cases explicitly if they affect the implementation.
Correctness Proof
We prove that the algorithm returns the correct answer.
Lemma 1.
State the first key claim.
Proof.
Provide a concise proof.
Lemma 2.
State the next claim if needed.
Proof.
Provide a concise proof.
Theorem.
The algorithm outputs the correct answer for every valid input.
Proof.
Combine the lemmas and finish the argument.
Complexity Analysis
State the running time and memory usage in terms of the input size.
Implementation Notes
Mention any non-obvious implementation detail that is easy to get wrong.
Mention numeric limits, indexing conventions, or tie-breaking rules if relevant.
Code
C++ solution used for this page.
#include <bits/stdc++.h>
using namespace std;
namespace {
void solve() {
// Fill in the full solution logic for the problem here.
}
} // namespace
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
solve();
return 0;
}
Source Files and Assets
Raw files are still available here when you want the original TeX, C++, or statement assets.
Show raw files
competitive_programming/icpc/2013/C-surely-you-congest/solution.texC++ implementationcompetitive_programming/icpc/2013/C-surely-you-congest/solution.cppStatement textcompetitive_programming/icpc/2013/C-surely-you-congest/statement.txtStatement PDFcompetitive_programming/icpc/2013/C-surely-you-congest/statement.pdfMetadatacompetitive_programming/icpc/2013/C-surely-you-congest/meta.jsonYear packetcompetitive_programming/icpc/2013/contest_problems.pdf