답안 #1100260

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1100260 2024-10-13T11:01:15 Z MMihalev Simurgh (IOI17_simurgh) C++14
30 / 100
89 ms 3692 KB
#include<iostream>
#include<algorithm>
#include<set>
#include<queue>
#include "simurgh.h"
using namespace std;
const int MAX_N=5e2+3;
const int MAX_M=125000;
int n,m;
int q;
vector<int>edges;
vector<pair<int,int>>g[MAX_N];
bool used[MAX_N];
vector<int>comp;
vector<vector<int>>comps;
int adj[MAX_N];

bool stat[MAX_M];
bool checked[MAX_M];
int forsure;

void reset()
{
    comps.clear();
    edges.clear();
    for(int i=0;i<n;i++)
    {
        adj[i]=-1;
        used[i]=0;
    }
}
void dfs(int u)
{
    if(adj[u]!=-1)
    {
        if(1)
        {
            comp.push_back(adj[u]);
        }
        if(stat[adj[u]])forsure=adj[u];
    }
    used[u]=1;
    for(auto [v,edge]:g[u])
    {
        if(used[v])continue;
        edges.push_back(edge);
        dfs(v);
    }
}
void rep(int prev,int edge)
{
    for(int i=0;i<edges.size();i++)
    {
        if(edges[i]==prev){edges[i]=edge;return;}
    }
}
vector<int> find_roads(int N, vector<int> u, vector<int> v)
{
    n=N;
    m=u.size();

    vector<int>ans;
    for(int i=0;i<m;i++)
    {
        g[u[i]].push_back({v[i],i});
        g[v[i]].push_back({u[i],i});
    }

    for(int u=0;u<n;u++)
    {
        reset();
        used[u]=1;
        for(auto [v,edge]:g[u])
        {
            adj[v]=edge;
        }
        for(auto [v,edge]:g[u])
        {
            if(!used[v])
            {
                forsure=-1;
                comp.clear();
                dfs(v);
                if(forsure!=-1)
                {
                    comp.push_back(forsure);
                }
                comps.push_back(comp);
            }
        }

        for(auto c:comps)
        {
            edges.push_back(c[0]);
        }

        for(auto c:comps)
        {
            int ma=count_common_roads(edges);q++;
            vector<int>marked;
            marked.push_back(c[0]);
            int prev=c[0];

            for(int edge:c)
            {
                if(edge==c[0])continue;

                rep(prev,edge);

                int cur=count_common_roads(edges);q++;
                if(cur>ma)
                {
                    marked.clear();
                    ma=cur;
                    marked.push_back(edge);
                }
                else if(cur==ma)
                {
                    marked.push_back(edge);
                }

                prev=edge;
            }

            for(int edge:marked)stat[edge]=1;
        }

        for(auto [v,edge]:g[u])checked[edge]=1;
    }

    for(int i=0;i<m;i++)
    {
        if(stat[i])ans.push_back(i);
    }

    return ans;
}

Compilation message

simurgh.cpp: In function 'void dfs(int)':
simurgh.cpp:43:14: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   43 |     for(auto [v,edge]:g[u])
      |              ^
simurgh.cpp: In function 'void rep(int, int)':
simurgh.cpp:52:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   52 |     for(int i=0;i<edges.size();i++)
      |                 ~^~~~~~~~~~~~~
simurgh.cpp: In function 'std::vector<int> find_roads(int, std::vector<int>, std::vector<int>)':
simurgh.cpp:73:18: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   73 |         for(auto [v,edge]:g[u])
      |                  ^
simurgh.cpp:77:18: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   77 |         for(auto [v,edge]:g[u])
      |                  ^
simurgh.cpp:128:18: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
  128 |         for(auto [v,edge]:g[u])checked[edge]=1;
      |                  ^
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 336 KB correct
2 Correct 1 ms 336 KB correct
3 Correct 1 ms 508 KB correct
4 Correct 0 ms 336 KB correct
5 Correct 1 ms 504 KB correct
6 Correct 1 ms 336 KB correct
7 Correct 1 ms 336 KB correct
8 Correct 1 ms 336 KB correct
9 Correct 1 ms 336 KB correct
10 Correct 1 ms 336 KB correct
11 Correct 1 ms 336 KB correct
12 Correct 1 ms 336 KB correct
13 Correct 1 ms 516 KB correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 336 KB correct
2 Correct 1 ms 336 KB correct
3 Correct 1 ms 508 KB correct
4 Correct 0 ms 336 KB correct
5 Correct 1 ms 504 KB correct
6 Correct 1 ms 336 KB correct
7 Correct 1 ms 336 KB correct
8 Correct 1 ms 336 KB correct
9 Correct 1 ms 336 KB correct
10 Correct 1 ms 336 KB correct
11 Correct 1 ms 336 KB correct
12 Correct 1 ms 336 KB correct
13 Correct 1 ms 516 KB correct
14 Correct 2 ms 508 KB correct
15 Correct 2 ms 336 KB correct
16 Correct 2 ms 508 KB correct
17 Correct 2 ms 336 KB correct
18 Correct 1 ms 336 KB correct
19 Correct 2 ms 336 KB correct
20 Correct 2 ms 336 KB correct
21 Correct 2 ms 336 KB correct
22 Correct 2 ms 336 KB correct
23 Correct 2 ms 336 KB correct
24 Correct 2 ms 336 KB correct
25 Correct 1 ms 336 KB correct
26 Correct 1 ms 336 KB correct
27 Correct 1 ms 336 KB correct
28 Correct 1 ms 336 KB correct
29 Correct 1 ms 336 KB correct
30 Correct 1 ms 336 KB correct
31 Correct 1 ms 336 KB correct
32 Correct 1 ms 504 KB correct
33 Correct 1 ms 336 KB correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 336 KB correct
2 Correct 1 ms 336 KB correct
3 Correct 1 ms 508 KB correct
4 Correct 0 ms 336 KB correct
5 Correct 1 ms 504 KB correct
6 Correct 1 ms 336 KB correct
7 Correct 1 ms 336 KB correct
8 Correct 1 ms 336 KB correct
9 Correct 1 ms 336 KB correct
10 Correct 1 ms 336 KB correct
11 Correct 1 ms 336 KB correct
12 Correct 1 ms 336 KB correct
13 Correct 1 ms 516 KB correct
14 Correct 2 ms 508 KB correct
15 Correct 2 ms 336 KB correct
16 Correct 2 ms 508 KB correct
17 Correct 2 ms 336 KB correct
18 Correct 1 ms 336 KB correct
19 Correct 2 ms 336 KB correct
20 Correct 2 ms 336 KB correct
21 Correct 2 ms 336 KB correct
22 Correct 2 ms 336 KB correct
23 Correct 2 ms 336 KB correct
24 Correct 2 ms 336 KB correct
25 Correct 1 ms 336 KB correct
26 Correct 1 ms 336 KB correct
27 Correct 1 ms 336 KB correct
28 Correct 1 ms 336 KB correct
29 Correct 1 ms 336 KB correct
30 Correct 1 ms 336 KB correct
31 Correct 1 ms 336 KB correct
32 Correct 1 ms 504 KB correct
33 Correct 1 ms 336 KB correct
34 Incorrect 89 ms 1360 KB WA in grader: NO
35 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 336 KB correct
2 Correct 1 ms 336 KB correct
3 Incorrect 69 ms 3692 KB WA in grader: NO
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 336 KB correct
2 Correct 1 ms 336 KB correct
3 Correct 1 ms 508 KB correct
4 Correct 0 ms 336 KB correct
5 Correct 1 ms 504 KB correct
6 Correct 1 ms 336 KB correct
7 Correct 1 ms 336 KB correct
8 Correct 1 ms 336 KB correct
9 Correct 1 ms 336 KB correct
10 Correct 1 ms 336 KB correct
11 Correct 1 ms 336 KB correct
12 Correct 1 ms 336 KB correct
13 Correct 1 ms 516 KB correct
14 Correct 2 ms 508 KB correct
15 Correct 2 ms 336 KB correct
16 Correct 2 ms 508 KB correct
17 Correct 2 ms 336 KB correct
18 Correct 1 ms 336 KB correct
19 Correct 2 ms 336 KB correct
20 Correct 2 ms 336 KB correct
21 Correct 2 ms 336 KB correct
22 Correct 2 ms 336 KB correct
23 Correct 2 ms 336 KB correct
24 Correct 2 ms 336 KB correct
25 Correct 1 ms 336 KB correct
26 Correct 1 ms 336 KB correct
27 Correct 1 ms 336 KB correct
28 Correct 1 ms 336 KB correct
29 Correct 1 ms 336 KB correct
30 Correct 1 ms 336 KB correct
31 Correct 1 ms 336 KB correct
32 Correct 1 ms 504 KB correct
33 Correct 1 ms 336 KB correct
34 Incorrect 89 ms 1360 KB WA in grader: NO
35 Halted 0 ms 0 KB -