QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#359412#410. TelegraphGoodKnight0 1ms3832kbC++203.5kb2024-03-20 17:39:092024-03-20 17:39:11

Judging History

你现在查看的是最新测评结果

  • [2024-03-20 17:39:11]
  • 评测
  • 测评结果:0
  • 用时:1ms
  • 内存:3832kb
  • [2024-03-20 17:39:09]
  • 提交

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&&current!=1)||start){
        current = ocean[current].odb;
        licz++;
        start=0;
    }
    if(licz==n&&current==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%