星战80 点37 38 39 40 wa 求助
查看原帖
星战80 点37 38 39 40 wa 求助
401479
LuckiestShawn楼主2023/2/6 08:41
#include <iostream>
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <vector>
using namespace std;
struct AB{
    unsigned long long id;
    unsigned long long to;
}ab;
vector <AB> ed[500005];
unsigned long long n,m,q,k,ked[500006],kpoint[500005],pointo[500005],pointr[50005],,sumed,sumpoint,o,u,v;
void init()
{
    for(unsigned long long i=1;i<=n;i++)
        sumpoint += kpoint[i] = rand()*rand();
    return ;
}
void destroyEG()
{
    scanf("%llu%llu",&u,&v);
    sumed -= kpoint[u];
    pointr[v] -= kpoint[u];
    return ;
}
void destoryPOINT()
{
    scanf("%llu",&u);
    sumed -= pointr[u];
    pointr[u] = 0;
    return ;
}
void repairEG()
{
    scanf("%llu%llu",&u,&v);
    sumed += kpoint[u];
    pointr[v] += kpoint[u];
    return ;
}
void repairPOINT()
{
    scanf("%llu",&u);
    sumed += pointo[u] - pointr[u];
    pointr[u] = pointo[u];
    return ;
}
int main()
{
    srand((unsigned)time(NULL));
    scanf("%llu%llu",&n,&m);
    init();
    for(unsigned long long i=0;i<m;i++)
    {
        scanf("%llu%llu",&o,&ab.to);
        ab.id = i;
        ed[o].push_back(ab);

        ked[i] = kpoint[o];
        pointo[ab.to] += kpoint[o];
    }
    for(unsigned long long i=1;i<=n;i++)
    {
        pointr[i] = pointo[i];
        for(unsigned long long j=0;j<ed[i].size();j++)
            sumed += ked[ed[i][j].id];
    }
    scanf("%llu",&q);
    while(q--)
    {
        scanf("%llu",&k);
        switch(k)
        {
            case 1:
                destroyEG();
                break;
            case 2:
                destoryPOINT();
                break;
            case 3:
                repairEG();
                break;
            case 4:
                repairPOINT();
                break;
            default:
                break;
        }
        printf(sumed==sumpoint?"YES ":"NO ");
        printf("\n");
    }
    return 0;
}

记录 救救孩子吧

2023/2/6 08:41
加载中...