| Task: | Tietoverkko |
| Sender: | shmoul |
| Submission time: | 2021-10-17 23:55:28 +0300 |
| Language: | C++ (C++17) |
| Status: | READY |
| Result: | 10 |
| group | verdict | score |
|---|---|---|
| #1 | ACCEPTED | 10 |
| #2 | TIME LIMIT EXCEEDED | 0 |
| #3 | TIME LIMIT EXCEEDED | 0 |
| test | verdict | time | group | |
|---|---|---|---|---|
| #1 | ACCEPTED | 0.02 s | 1, 2, 3 | details |
| #2 | TIME LIMIT EXCEEDED | -- | 2, 3 | details |
| #3 | TIME LIMIT EXCEEDED | -- | 3 | details |
Compiler report
input/code.cpp: In function 'int main()':
input/code.cpp:76:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i=1;i<Computers.size();i++)
~^~~~~~~~~~~~~~~~~
input/code.cpp:78:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int j=i+1;j<Computers.size();j++)
~^~~~~~~~~~~~~~~~~Code
#include <iostream>
#include <vector>
#include <list>
#include <cmath>
#include <map>
#pragma GCC optimize("Ofast")
#pragma GCC optimize ("unroll-loops")
using namespace std;
struct Connection
{
int CompID;
int Speed;
Connection(int compid, int speed) {CompID=compid; Speed=speed;}
};
struct Computer
{
list<Connection> Connections;
Computer(){}
};
vector<Computer> Computers;
long long SpeedSum;
//map<long long, int> ConnectionCache;
map<pair<int ,int>, int> ConnectionCache;
int FindSpeed(int from, int to, int origin=-1)
{
//auto x = ConnectionCache.find({from, to});
//if(x!=ConnectionCache.end()) return x->second;
Computer& c = Computers[from];
int n=0;
list<Connection> temp = c.Connections;
for(Connection& conn : c.Connections)
{
if(origin==conn.CompID) continue;
if(conn.CompID==to) return conn.Speed;
int s = FindSpeed(conn.CompID, to, from);
/*if(ConnectionCache.find({from, to})!=ConnectionCache.end())
{
if(n>ConnectionCache[{from, to}])
ConnectionCache[{from, to}] = n;
}
else ConnectionCache[{from, to}] = n;*/
if(s>0)
{
n=fmin(conn.Speed, s);
break;
}
}
return n;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
int count;
cin>>count;
for(int i=0;i<=count;i++)
{
Computers.push_back(Computer());
}
for(int i=1;i<count;i++)
{
int compid1, compid2, speed;
cin>>compid1>>compid2>>speed;
Computer& comp1 = Computers[compid1];
Computer& comp2 = Computers[compid2];
comp1.Connections.push_back(Connection(compid2, speed));
comp2.Connections.push_back(Connection(compid1, speed));
}
for(int i=1;i<Computers.size();i++)
{
for(int j=i+1;j<Computers.size();j++)
{
/*int Speed;
auto x = ConnectionCache.find({j, i});
auto y = ConnectionCache.find({i, j});
if(x!=ConnectionCache.end()) SpeedSum += x->second;
else if(y!=ConnectionCache.end()) SpeedSum += y->second;
else Speed = FindSpeed(j, i);*/
int Speed = FindSpeed(j, i);
SpeedSum+=Speed;
}
}
cout<<SpeedSum;
return 0;
}
Test details
Test 1
Group: 1, 2, 3
Verdict: ACCEPTED
| input |
|---|
| 100 1 2 74 1 3 100 2 4 50 3 5 40 ... |
| correct output |
|---|
| 88687 |
| user output |
|---|
| 88687 |
Test 2
Group: 2, 3
Verdict: TIME LIMIT EXCEEDED
| input |
|---|
| 5000 1 2 613084013 1 3 832364259 2 4 411999902 3 5 989696303 ... |
| correct output |
|---|
| 1103702320243776 |
| user output |
|---|
| (empty) |
Test 3
Group: 3
Verdict: TIME LIMIT EXCEEDED
| input |
|---|
| 200000 1 2 613084013 1 3 832364259 2 4 411999902 3 5 989696303 ... |
| correct output |
|---|
| 1080549209850010931 |
| user output |
|---|
| (empty) |
