提出 #73540108


ソースコード 拡げる

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
typedef long long ll;
typedef pair<ll,ll> PII;
typedef array<ll,2> a2;
typedef array<ll,3> a3;
int n,m,k;
ll a[N],b[N],c[N];
vector<int> e[N];
bool tf[N];
int dfn[N],low[N],hgs;
int rd[N];
int id[N],scccnt;
int st[N],tt=-1;
int sz[N];
bool instack[N];

void tarjan(int u){
    dfn[u]=low[u]=++hgs;
    st[++tt]=u,instack[u]=1;
    for(auto j:e[u]){
        if(!dfn[j]){
            tarjan(j);
            low[u]=min(low[u],low[j]);
        }else if(instack[j]) low[u]=min(low[u],dfn[j]);
    }
    
    if(dfn[u]==low[u]){
        ++scccnt;
        int y;
        do{
            y=st[tt--];
            instack[y]=0;
            id[y]=scccnt;
            sz[scccnt]++;
        }while(y!=u);
    }
    
}


void 打卡啦摩托(){
    cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i]>>b[i]>>c[i];
    for(int i=1;i<=n;i++) e[i].clear();
    {
        
        vector<a2> v;
        for(int i=1;i<=n;i++) v.push_back({a[i],i});
        sort(v.begin(),v.end(),greater<a2>());
        for(int i=1;i<n;i++){
            int u=v[i][1],uu=v[i-1][1];
            e[uu].push_back(u);
            if(v[i][0]==v[i-1][0]) e[u].push_back(uu);
        }
    }
    {
        
        vector<a2> v;
        for(int i=1;i<=n;i++) v.push_back({b[i],i});
        sort(v.begin(),v.end(),greater<a2>());
        for(int i=1;i<n;i++){
            int u=v[i][1],uu=v[i-1][1];
            e[uu].push_back(u);
            if(v[i][0]==v[i-1][0]) e[u].push_back(uu);
        }
    }
    {
        
        vector<a2> v;
        for(int i=1;i<=n;i++) v.push_back({c[i],i});
        sort(v.begin(),v.end(),greater<a2>());
        for(int i=1;i<n;i++){
            int u=v[i][1],uu=v[i-1][1];
            e[uu].push_back(u);
            if(v[i][0]==v[i-1][0]) e[u].push_back(uu);
        }
    }
    for(int i=1;i<=n;i++){
        dfn[i]=0,low[i]=0,instack[i]=0,id[i]=0,st[i]=0,sz[i]=0;
        rd[i]=0;
    }
    hgs=0,scccnt=0,tt=-1;
    for(int i=1;i<=n;i++){
        if(!dfn[i]) tarjan(i);
    }
    for(int i=1;i<=n;i++){
        for(auto j:e[i]){
            // cout<<i<<" "<<j<<endl;
            if(id[i]!=id[j])
            rd[id[j]]++;
        }
    }
    int ct=0,ctsz=0;
    for(int i=1;i<=scccnt;i++){
        if(rd[i]==0){
            ct++;
            if(ct>=2) ctsz=0;
            else ctsz=sz[i];
        }
    }
    // cout<<ct<<endl;
    cout<<ctsz<<"\n";
    
    
}


int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    int _=1;
    cin>>_;
    while(_--){
        打卡啦摩托();
    }
}

提出情報

提出日時
問題 C - Strong Surname
ユーザ zhishengie
言語 C++23 (GCC 15.2.0)
得点 600
コード長 2670 Byte
結果 AC
実行時間 162 ms
メモリ 40796 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 600 / 600
結果
AC × 1
AC × 23
セット名 テストケース
Sample 00_sample_01.txt
All 00_sample_01.txt, hand-12.txt, hand-13.txt, hand-14.txt, hand-15.txt, hand-16.txt, hand-17.txt, hand-18.txt, hand-19.txt, hand-20.txt, hand-21.txt, hand-22.txt, random-01.txt, random-02.txt, random-03.txt, random-04.txt, random-05.txt, random-06.txt, random-07.txt, random-08.txt, random-09.txt, random-10.txt, random-11.txt
ケース名 結果 実行時間 メモリ
00_sample_01.txt AC 5 ms 3804 KiB
hand-12.txt AC 52 ms 3556 KiB
hand-13.txt AC 88 ms 8092 KiB
hand-14.txt AC 162 ms 38000 KiB
hand-15.txt AC 153 ms 38892 KiB
hand-16.txt AC 157 ms 38956 KiB
hand-17.txt AC 84 ms 7888 KiB
hand-18.txt AC 83 ms 8296 KiB
hand-19.txt AC 102 ms 21908 KiB
hand-20.txt AC 90 ms 8072 KiB
hand-21.txt AC 84 ms 8244 KiB
hand-22.txt AC 39 ms 7800 KiB
random-01.txt AC 39 ms 3776 KiB
random-02.txt AC 45 ms 3652 KiB
random-03.txt AC 62 ms 3928 KiB
random-04.txt AC 87 ms 7992 KiB
random-05.txt AC 103 ms 14396 KiB
random-06.txt AC 118 ms 23888 KiB
random-07.txt AC 152 ms 40700 KiB
random-08.txt AC 154 ms 40796 KiB
random-09.txt AC 151 ms 40688 KiB
random-10.txt AC 151 ms 40744 KiB
random-11.txt AC 160 ms 40620 KiB