CSES - Datatähti 2022 alku - Results
Submission details
Task:Tietoverkko
Sender:Katto
Submission time:2021-10-13 22:17:30 +0300
Language:C++ (C++17)
Status:READY
Result:0
Feedback
groupverdictscore
#10
#20
#30
Test results
testverdicttimegroup
#10.04 s1, 2, 3details
#2--2, 3details
#30.29 s3details

Compiler report

input/code.cpp: In member function 'long long unsigned int Graph::BFS(int)':
input/code.cpp:116:31: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
             for (int j = 0; j < neighbors.size(); j++)
                             ~~^~~~~~~~~~~~~~~~~~
input/code.cpp:126:35: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
                 for (int i = 0; i < visited.size(); i++)
                                 ~~^~~~~~~~~~~~~~~~
input/code.cpp:132:43: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
                         for (int k = 0; k < dist[i].size(); k++)
                                         ~~^~~~~~~~~~~~~~~~

Code

#include <iostream>
#include <vector>
#define ull unsigned long long
using namespace std;
class Queue
{
private:
vector<ull> queue;
public:
Queue()
{
}
void enqueue(int vertex)
{
queue.push_back(vertex);
}
int dequeue()
{
int vertex = queue[0];
queue.erase(queue.begin());
return vertex;
}
bool isempty()
{
if (queue.size())
return false;
else
return true;
}
~Queue()
{
queue.clear();
}
};
class Graph
{
private:
int **adjMatrix;
int numVertices;
public:
Graph(int numVertices)
{
this->numVertices = numVertices;
adjMatrix = new int *[numVertices];
for (int i = 0; i < numVertices; i++)
{
adjMatrix[i] = new int[numVertices];
for (int j = 0; j < numVertices; j++)
{
adjMatrix[i][j] = 0;
}
}
}
void addEdge(int i, int j, int x)
{
adjMatrix[i][j] = x;
adjMatrix[j][i] = x;
}
int getValue(int i, int j)
{
return adjMatrix[i][j];
}
vector<pair<int, ull>> neighbor(int vertex)
{
vector<pair<int, ull>> neighbors;
for (int j = 0; j < numVertices; j++)
{
if (adjMatrix[vertex][j])
neighbors.push_back(make_pair(j, adjMatrix[vertex][j]));
}
return neighbors;
}
ull minelement(vector<ull> x, ull start, ull end)
{
ull min = x[0];
for (ull i = start; i < end; i++)
{
if (x[i] < x[0])
min = x[i];
}
return min;
}
ull BFS(int start)
{
int vertex;
ull total = 0;
vector<bool> visited(numVertices);
Queue jono;
vector<vector<ull>> dist(numVertices);
jono.enqueue(start);
visited[start] = true;
// dist[start].push_back(0);
// EHDOTUS: Käy läpi VISITED listaan ja lisää niistä kaikista etäisyydet.
while (!jono.isempty())
{
vertex = jono.dequeue();
// cout << "\nAccessing primary vertex: " << vertex << endl;
vector<pair<int, ull>> neighbors = neighbor(vertex);
for (int j = 0; j < neighbors.size(); j++)
{
if (visited[neighbors[j].first])
continue;
// cout << "Accessing neighboring vertex: " << neighbors[j].first << endl;
jono.enqueue(neighbors[j].first);
visited[neighbors[j].first] = true;
dist[neighbors[j].first] = dist[vertex];
dist[neighbors[j].first].push_back(neighbors[j].second);
for (int i = 0; i < visited.size(); i++)
{
if (visited[i])
{
dist[i].push_back(neighbors[j].second);
for (int k = 0; k < dist[i].size(); k++)
{
total += minelement(dist[i], k, dist[i].size() + 1);
}
}
}
}
}
return total;
}
~Graph()
{
for (int i = 0; i < numVertices; i++)
{
delete[] adjMatrix[i];
}
delete[] adjMatrix;
}
};
int main()
{
long n, a, b, x = 0;
ull sum;
cin >> n;
Graph network(n + 1);
for (int i = 1; i < n; i++)
{
cin >> a >> b >> x;
network.addEdge(a, b, x);
}
sum = network.BFS(1) / n;
cout << sum;
}

Test details

Test 1

Group: 1, 2, 3

Verdict:

input
100
1 2 74
1 3 100
2 4 50
3 5 40
...

correct output
88687

user output
98590

Test 2

Group: 2, 3

Verdict:

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:

input
200000
1 2 613084013
1 3 832364259
2 4 411999902
3 5 989696303
...

correct output
1080549209850010931

user output
(empty)