Submission #1140205

#TimeUsernameProblemLanguageResultExecution timeMemory
1140205argon1Monthly railway pass (LMIO18_menesinis_bilietas)C++20
100 / 100
634 ms102836 KiB
#include <bits/stdc++.h> using namespace std; #define MAX_CITIES 500001 // Maximum number of cities vector<int> busGraph[MAX_CITIES]; // Adjacency list for bus connections vector<int> trainGraph[MAX_CITIES]; // Adjacency list for train connections set<int> componentNeighbors[MAX_CITIES]; // Neighboring components connected via a bus int trainComponent[MAX_CITIES]; // Train component ID for each city int componentSize[MAX_CITIES]; // Size of each train component // Depth-First Search to assign train component IDs void dfsTrain(int city, int componentID) { trainComponent[city] = componentID; // Assign current city to the current component ++componentSize[componentID]; // Increment the size of the current component // Visit all cities directly connected by train for (int neighbor : trainGraph[city]) { if (trainComponent[neighbor] == 0) { // If neighbor is unvisited dfsTrain(neighbor, componentID); } } } int main() { int numCities, numConnections; // Number of cities and connections cin >> numCities >> numConnections; // Read the graph for (int i = 0; i < numConnections; ++i) { int cityA, cityB; char connectionType; cin >> cityA >> cityB >> connectionType; --cityA, --cityB; // Convert to 0-based indexing if (connectionType == 'T') { // Train connection trainGraph[cityA].push_back(cityB); trainGraph[cityB].push_back(cityA); } else { // Bus connection busGraph[cityA].push_back(cityB); busGraph[cityB].push_back(cityA); } } // Step 1: Find train-connected components using DFS int componentCount = 1; // Component ID counter (1-based indexing) for (int i = 0; i < numCities; ++i) { if (trainComponent[i] == 0) { // If city is not yet assigned to a component dfsTrain(i, componentCount++); } } // Step 2: Find neighboring components connected by buses for (int city = 0; city < numCities; ++city) { for (int neighbor : busGraph[city]) { // If the bus connects two different train components if (trainComponent[city] != trainComponent[neighbor]) { int componentA = trainComponent[city]; int componentB = trainComponent[neighbor]; componentNeighbors[componentA].insert(componentB); componentNeighbors[componentB].insert(componentA); } } } // Step 3: Count valid components int result = 0; // Total number of valid cities for (int componentID = 1; componentID < componentCount; ++componentID) { // Check if the component can reach all other components except itself if (componentNeighbors[componentID].size() == componentCount - 2) { result += componentSize[componentID]; // Add the size of the valid component } } // Step 4: Output the result cout << result << '\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...