ENG  RUSTimus Online Judge
Online Judge
Задачи
Авторы
Соревнования
О системе
Часто задаваемые вопросы
Новости сайта
Форум
Ссылки
Архив задач
Отправить на проверку
Состояние проверки
Руководство
Регистрация
Исправить данные
Рейтинг авторов
Текущее соревнование
Расписание
Прошедшие соревнования
Правила
вернуться в форум

Обсуждение задачи 1671. Паутина Ананси

Help!WA#11
Послано miao22 23 июн 2019 17:08
#include<bits/stdc++.h>
using namespace std;
int n,m,q,a[100003],b[100003],c[100003];
vector<pair<int,int> >v;
vector<int>g[100003];
bool vis[100003];
int qq[100003];
map<int,int>mp;
void dfs(int x,int cc){
    vis[x]=1;
    for(int i=0;i<g[x].size();i++)
        if(!vis[g[x][i]])
            dfs(g[x][i],cc);
    qq[x]=cc;
}
int main(){
    cin>>n>>m;
    for(int i=0;i<m;i++)
        cin>>a[i]>>b[i],
        a[i]--,
        b[i]--;
    cin>>q;
    for(int i=0;i<q;i++)cin>>c[i],c[i]--,v.push_back(make_pair(a[c[i]],b[c[i]])),a[c[i]]=b[c[i]]=-1;
    reverse(c,c+n);reverse(v.begin(),v.end());
    for(int i=0;i<m;i++)
        if(a[i]!=-1)
            g[a[i]].push_back(b[i]),
            g[b[i]].push_back(a[i]);
    int cnt=0;
    for(int i=0;i<n;i++)
        if(!vis[i])
            mp[cnt]=cnt,
            dfs(i,cnt++);
    vector<int>ans;
    for(int i=0;i<q;i++){
        ans.push_back(cnt);
        if(mp[qq[v[i].first]]!=mp[qq[v[i].second]])
            mp[qq[v[i].first]]=mp[qq[v[i].second]],
            qq[v[i].first]=qq[v[i].second],
            cnt--;
    }
    reverse(ans.begin(),ans.end());
    for(int i=0;i<ans.size();i++)
        cout<<ans[i]<<' ';
}
Re: Help!WA#11
Послано miao22 23 июн 2019 17:09
are there any test?
Re: Help!WA#11
Послано Ivan 30 янв 2020 18:15
5 8
2 3
1 2
2 5
1 4
1 5
3 4
3 4
4 4
8
7 6 8 2 3 4 5 1