제출 #302244

#제출 시각아이디문제언어결과실행 시간메모리
302244vipghn2003Bridges (APIO19_bridges)C++14
컴파일 에러
0 ms0 KiB
#include<bits/stdc++.h>
#define fi first
#define se second
#define pii pair<int,int>
#define mp make_pair
using namespace std;

const int N=5e4+5;
const int M=1e5+5;
int n,m,q,u[M],v[M],w[M],res[M],p[N],sz[N],cur,tmpw[M];
bool change[M],vis[N];
vector<int>edge,adj[N],go;
vector<tuple<int,int,int>>query[3];

int Find(int x)
{
    if(x==p[x]) return x;
    return x=Find(p[x]);
}

void link(int u,int v)
{
    u=Find(u);
    v=Find(v);
    adj[u].push_back(v);
    adj[v].push_back(u);
}

void Union(int u,int v)
{
    u=Find(u);
    v=Find(v);
    if(u==v) return ;
    if(sz[u]>sz[v]) swap(u,v);
    p[u]=v;
    sz[v]+=sz[u];
}

void dfs(int u)
{
    vis[u]=true;
    go.push_back(u);
    for(auto&v:adj[u]) if(!vis[v]) dfs(v);
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cin>>n>>m;
    for(int i=1;i<=m;i++) cin>>u[i]>>v[i]>>w[i];
    cin>>q;
    int SQ==500;
    for(int i=1;i<=q;i++)
    {
        int type,k,d;
        cin>>type>>k>>d;
        if(type==1) change[k]=true;
        query[type].push_back(make_tuple(d,k,i));
        if(i%SQ==0||i==q)
        {
            for(int j=1;j<=n;j++)
            {
                sz[j]=1;
                p[j]=j;
            }
            vector<pii>order;
            for(int j=1;j<=m;j++)
            {
                if(!change[j]) order.push_back(mp(w[j],j));
            }
            sort(order.begin(),order.end());
            sort(query[2].rbegin(),query[2].rend());
            int cur=order.size()-1;
            for(auto&x:query[2])
            {
                while(cur>=0&&order[cur].fi>=get<0>(x))
                {
                    Union(u[order[cur].se],v[order[cur].se]);
                    cur--;
                }
                for(auto&id:query[1]) tmpw[get<1>(id)]=w[get<1>(id)];
                for(auto&id:query[1]) if(get<2>(id)<get<2>(x)) tmpw[get<1>(id)]=get<0>(id);
                for(auto&id:query[1]) if(tmpw[get<1>(id)]>=get<0>(x)) link(u[get<1>(id)],v[get<1>(id)]);
                dfs(Find(get<1>(x)));
                while(!go.empty())
                {
                    int ver=go.back();
                    go.pop_back();
                    vis[ver]=false;
                    res[get<2>(x)]+=sz[ver];
                }
                for(auto&id:query[1])
                {
                     adj[Find(u[get<1>(id)])].clear();
                     adj[Find(v[get<1>(id)])].clear();
                }
            }
            for(int j=1;j<=m;j++) change[j]=false;
            for(auto&id:query[1]) w[get<1>(id)]=get<0>(id);
            query[1].clear();
            query[2].clear();
        }
    }
    for(int i=1;i<=q;i++) if(res[i]) cout<<res[i]<<'\n';
}

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

bridges.cpp: In function 'int main()':
bridges.cpp:53:11: error: expected initializer before '==' token
   53 |     int SQ==500;
      |           ^~
bridges.cpp:60:14: error: 'SQ' was not declared in this scope
   60 |         if(i%SQ==0||i==q)
      |              ^~