QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#359412 | #410. Telegraph | GoodKnight | 0 | 1ms | 3832kb | C++20 | 3.5kb | 2024-03-20 17:39:09 | 2024-03-20 17:39:11 |
answer
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+8;
int n;
struct wyspa{
int id;
int odb;
long long cost;
int spoj;
vector<int> in;
};
vector<wyspa> ocean;
bool checkIfDone(){
int licz = 0;
int current = 1;
bool start=1;
while((licz<n&¤t!=1)||start){
current = ocean[current].odb;
licz++;
start=0;
}
if(licz==n&¤t==1) return 1;
return 0;
}
bool odw[N];
int spojneLicz = 1;
void spojne(int cur){
if(odw[cur]){
ocean[cur].spoj = spojneLicz;
spojneLicz++;
odw[cur]=0;
return;
}
odw[cur]=1;
if(ocean[ocean[cur].odb].spoj>0){
ocean[cur].spoj = ocean[ocean[cur].odb].spoj;
return;
}
spojne(ocean[cur].odb);
ocean[cur].spoj = ocean[ocean[cur].odb].spoj;
}
vector<vector<wyspa>> spo;
set<int> cykl;
set<int> wyst;
int main(){
cin >> n;
wyspa nowawyspa;
ocean.push_back(nowawyspa);
vector<int> pustyvector;
for(int i=1; i<=n; i++){
cin >> nowawyspa.odb >> nowawyspa.cost;
nowawyspa.id = i;
nowawyspa.spoj=0;
nowawyspa.in = pustyvector;
ocean.push_back(nowawyspa);
}
if(checkIfDone()){
cout << 0 <<"\n";
return 0;
}
for(int i=1; i<=n; i++){
if(ocean[i].spoj==0) spojne(i);
///cout << ocean[i].spoj<<" ";
}
vector<wyspa> nowyvector;
for(int i=0; i<=spojneLicz; i++){
spo.push_back(nowyvector);
}
for(int i=1; i<=n; i++){
spo[ocean[i].spoj].push_back(ocean[i]);
}
long long wynik = 0;
for(int numerSpoj = 1; numerSpoj<spojneLicz; numerSpoj++){
long long sumaKraw=0;
if(spo[numerSpoj].empty()) continue;
cykl.clear();
wyst.clear();
wyspa curr = spo[numerSpoj][0];
while(cykl.find(curr.id) == cykl.end()){
if(wyst.find(curr.id) != cykl.end()){
cykl.insert(curr.id);
}
else wyst.insert(curr.id);
curr = ocean[curr.odb];
}
for(auto wys : spo[numerSpoj]){
ocean[wys.odb].in.push_back(wys.id);
sumaKraw+=wys.cost;
}
long long najmniejszaStrata = 1e18;
for(auto wys : spo[numerSpoj]){
wyspa aktu = ocean[wys.id];
if(aktu.in.size()==0) continue;
if(aktu.in.size()==1){
///cout << "aktu id:"<<aktu.id <<"\n";
wyspa sasiad = ocean[aktu.in[0]];
if(cykl.find(sasiad.id)!=cykl.end()){
najmniejszaStrata = min(najmniejszaStrata, sasiad.cost);
}
}
if(aktu.in.size()>1){
long long najwiekszy = -1e9;
long long sumaSasiadow = 0;
for(int i=0; i<aktu.in.size(); i++){
wyspa sasiad = ocean[aktu.in[i]];
sumaSasiadow+=sasiad.cost;
najwiekszy = max(najwiekszy, sasiad.cost);
}
for(int i=0; i<aktu.in.size(); i++){
wyspa sasiad = ocean[aktu.in[i]];
if(cykl.find(sasiad.id)==cykl.end()){
najmniejszaStrata = min(najmniejszaStrata, najwiekszy - sasiad.cost);
}
}
wynik+=sumaSasiadow - najwiekszy;
}
}
///cout << numerSpoj<<" "<<najmniejszaStrata<<"\n";
wynik+=najmniejszaStrata;
}
cout << wynik;
}
Details
Tip: Click on the bar to expand more detailed information
Subtask #1:
score: 0
Wrong Answer
Test #1:
score: 0
Wrong Answer
time: 1ms
memory: 3832kb
input:
10 3 85377744 3 191391530 4 553475509 8 344887257 9 812158120 1 880268352 4 686078706 7 182546394 4 220137367 3 89957933
output:
948948553
result:
wrong answer 1st lines differ - expected: '1081551750', found: '948948553'
Subtask #2:
score: 0
Skipped
Dependency #1:
0%
Subtask #3:
score: 0
Skipped
Dependency #1:
0%
Subtask #4:
score: 0
Skipped
Dependency #1:
0%