Advertisement
ivangarvanliev

Untitled

Mar 12th, 2025
175
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.21 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. struct Node {
  5.     string id;
  6.     int estimated_risk;
  7.     int real_risk;
  8.     vector<string> neighbors;
  9. };
  10.  
  11. void calculateRealRisk(unordered_map<string, Node>& network) {
  12.     queue<string> q;
  13.     unordered_map<string, bool> processed;
  14.    
  15.     // Initialize queue with all nodes
  16.     for (auto& [id, node] : network) {
  17.         q.push(id);
  18.         node.real_risk = node.estimated_risk;
  19.     }
  20.    
  21.     // Process nodes iteratively
  22.     while (!q.empty()) {
  23.         string current = q.front(); q.pop();
  24.         Node& curNode = network[current];
  25.         int max_risk = curNode.estimated_risk;
  26.        
  27.         for (const string& neighbor : curNode.neighbors) {
  28.             Node& adjNode = network[neighbor];
  29.             int adj_real_risk = processed[neighbor] ? adjNode.real_risk : adjNode.estimated_risk;
  30.             int new_risk = (curNode.estimated_risk + adj_real_risk + 1) / 2;
  31.             max_risk = max(max_risk, new_risk);
  32.         }
  33.        
  34.         if (max_risk > curNode.real_risk) {
  35.             curNode.real_risk = max_risk;
  36.             for (const string& neighbor : curNode.neighbors) {
  37.                 q.push(neighbor);
  38.             }
  39.         }
  40.         processed[current] = true;
  41.     }
  42. }
  43.  
  44. int main() {
  45.     int C;
  46.     cin >> C;
  47.     for (int t = 1; t <= C; ++t) {
  48.         int N;
  49.         cin >> N;
  50.         unordered_map<string, Node> network;
  51.         vector<string> key_services;
  52.        
  53.         for (int i = 0; i < N; ++i) {
  54.             string id;
  55.             int risk;
  56.             cin >> id >> risk;
  57.             Node node{id, risk, risk, {}};
  58.            
  59.             string neighbor;
  60.             while (cin.peek() != '\n' && cin >> neighbor) {
  61.                 node.neighbors.push_back(neighbor);
  62.             }
  63.             cin.ignore();
  64.            
  65.             if (id[0] == 'k') key_services.push_back(id);
  66.             network[id] = node;
  67.         }
  68.        
  69.         calculateRealRisk(network);
  70.        
  71.         cout << "Case #" << t << ": " << key_services.size();
  72.         for (const string& ks : key_services) {
  73.             cout << " " << ks << " " << network[ks].real_risk;
  74.         }
  75.         cout << "\n";
  76.     }
  77.     return 0;
  78. }
  79.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement