제출 #1320017

#제출 시각아이디문제언어결과실행 시간메모리
1320017ttparin_꿈 (IOI13_dreaming)C++20
18 / 100
29 ms11648 KiB
#include "dreaming.h"
#include<bits/stdc++.h>
using namespace std;
vector<pair<int,int>> v[100010];
int visited[100010];
int dp[100010];
int sumi1[100010];
int node1[100010];
int sumi2[100010];
priority_queue<int> pq;
void dfs(int u,int pa){
 for(auto g:v[u]){
    if(g.first!=pa){
        dfs(g.first,u);
        if(g.second+sumi1[g.first]>sumi1[u]){
            sumi2[u]=sumi1[u];
            sumi1[u]=g.second+sumi1[g.first];
            node1[u]=g.first;
        }
        else if(g.second+sumi1[g.first]>sumi2[u]){
            sumi2[u]=g.second+sumi1[g.first];
        }
    }
 }
 visited[u]=1;
}
void dfs2(int u,int pa,int root,int q){
    dp[root]=min(dp[root],max(q,sumi1[u]));
    for(auto g:v[u]){
        if(g.first!=pa){
            if(g.first!=node1[u]){
                dfs2(g.first,u,root,max(q,sumi1[u])+g.second);
            }
            else{
                dfs2(g.first,u,root,max(q,sumi2[u])+g.second);
            }
        }
    }
}
int travelTime(int n, int m, int l, int a[], int b[], int t[]) {
    for(int i=0;i<m;i++){
        v[a[i]].push_back({b[i],t[i]});
        v[b[i]].push_back({a[i],t[i]});
    }
    int co=0;
    for(int i=0;i<n;i++){
        if(visited[i]==1)
            continue;
        co++;
        dfs(i,-1);
        dp[i]=INT_MAX;
        dfs2(i,-1,i,0);
        pq.push(dp[i]);
    }

    if(co==1)
    return 0;
    if(co==2){
        int xxx=pq.top();
        pq.pop();
        int yyy=pq.top();
        return(xxx+yyy+l);
    }
    int xxx=pq.top();
    pq.pop();
    int yyy=pq.top();
    pq.pop();
    int zzz=pq.top();
    return(max(xxx+l+yyy,yyy+zzz+2*l));
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...