제출 #1337137

#제출 시각아이디문제언어결과실행 시간메모리
1337137aritro_이주 (IOI25_migrations)C++20
0 / 100
29 ms1008 KiB
#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
#define endl '\n'
#define pb push_back
#define ff first
#define ss second
#define all(a) a.begin(),a.end()

const int N=10000;

vector<vector<int>> g(N);

pair<int,pair<int,int>> bfs(vector<vector<int>>& g){
    int n=g.size();
    vector<int> dist(n,-1);
    queue<int> q;
    q.push(0);
    dist[0]=0;
    while(!q.empty()){
        int v=q.front();q.pop();
        for(int u:g[v]){
            if(dist[u]==-1){
                dist[u]=dist[v]+1;
                q.push(u);
            }
        }
    }
    int start=1,mx=0;
    for(int i=0;i<n;i++){
        if(dist[i]>mx){
            mx=dist[i];
            start=i;
        }
    }
    fill(dist.begin(),dist.end(),-1);
    q.push(start);
    dist[start]=0;
    while(!q.empty()){
        int v=q.front();
        q.pop();
        for(int u:g[v]){
            if(dist[u]==-1){
                dist[u]=dist[v]+1;
                q.push(u);
            }
        }
    }
    int en=start;
    mx=0;
    for(int i=0;i<n;i++){
        if(dist[i]>mx){
            mx=dist[i];
            en=i;
        }
    }
    return make_pair(mx,make_pair(start,en));
}

int send_message(int N,int i,int P);

pair<int,int> longest_path(vector<int> S);

int st=0,finish=0;

int send_message(int N,int i,int P){
    g[i].pb(P);
    g[P].pb(i);
    if(!(N-5<=i&&i<=N-1)) return 0;
    if(i==N-5) return N;
    if(i==N-4){
        auto ans=bfs(g);
        return ans.ff;
    }if(i==N-3){
        auto ans=bfs(g);
        st=min(ans.ss.ff,ans.ss.ss);
        return st+10000;
    }if(i==N-2){
        auto ans=bfs(g);
        finish=max(ans.ss.ss,ans.ss.ff);
        return finish;
    }if(i==N-1){
        auto ans=bfs(g);
        int add=0;
        if(st!=min(ans.ss.ff,ans.ss.ss)){
            add+=10;
        }
        if(finish!=max(ans.ss.ss,ans.ss.ff)) add+=20;
        return ans.ff+add;
    }
}

pair<int,int> longest_path(vector<int> S){
    int n=S[0];
    int a=S[1],b=S[2]-10000,c=S[3],d=S[4];
    //cout<<n<<' '<<a<<' '<<b<<' '<<c<<' '<<d<<endl;
    if(d-a>=30) return {c,n-1};
    if(d-a>=20) return {b,n-1};
    if(d-a>=10) return {c,n-1};
    if(d==a) return {min(b,c),max(b,c)};
    if(d==a+1) return {min(b,c),max(b,c)};
    return {min(b,c),max(b,c)};
}

컴파일 시 표준 에러 (stderr) 메시지

migrations.cpp: In function 'int send_message(int, int, int)':
migrations.cpp:92:1: warning: control reaches end of non-void function [-Wreturn-type]
   92 | }
      | ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...