Submission #2795

#TimeUsernameProblemLanguageResultExecution timeMemory
2795mhkim4886간선 파괴 (GA5_destroy)C++98
0 / 100
28 ms3668 KiB
#include <stdio.h>
#include <algorithm>

typedef struct _edge
{
    int start, end;
    int num;
} Edge;

bool Compare(const Edge &a, const Edge &b)
{
    return a.start < b.start;
}

int main()
{
    int V, E, Q, dst[60000][3];
    Edge edge[150000];
    scanf("%d %d", &V, &E);

    for(int i = 1; i <= E; i++)
    {
        int a, b;
        scanf("%d %d", &a, &b);

        if(a <= b)
        {
            edge[i].start = a;
            edge[i].end = b;
            edge[i].num = i;
        }
        else
        {
            edge[i].start = b;
            edge[i].end = a;
            edge[i].num = i;
        }
    }

    scanf("%d", &Q);
    for(int i = 1; i <= Q; i++) scanf("%d %d", &dst[i][1], &dst[i][2]);
    std::sort(edge+1, edge+1+E, Compare);

    int cptable[1000], counter[1000], component[60000];
    for(int i = 1; i <= Q; i++)
    {
        for(int j = 1; j <= V; j++)
        {
            cptable[j] = j;
            counter[j] = 0;
        }

        int components = 0;
        for(int j = 1; j <= E; j++)
        {
            if(dst[i][1] <= edge[j].num && edge[j].num <= dst[i][2]) continue;
            cptable[edge[j].end] = cptable[edge[j].start];
        }

        for(int j = 1; j <= E; j++)
        {
            if(counter[cptable[j]] == 0) components++;
            counter[cptable[j]] = 1;
        }

        component[i] = components;
    }

    for(int i = 1; i <= Q; i++) printf("%d\n", component[i]);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...