QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#603163#9310. Permutation Counting 4Totoro#WA 34ms7692kbC++142.1kb2024-10-01 15:01:362024-10-01 15:01:38

Judging History

你现在查看的是最新测评结果

  • [2024-10-01 15:01:38]
  • 评测
  • 测评结果:WA
  • 用时:34ms
  • 内存:7692kb
  • [2024-10-01 15:01:36]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;
constexpr int Spp{1<<20};
char buf[Spp],*p1,*p2;
#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,Spp,stdin),p1==p2)?EOF:*p1++)
template <typename T>
void read(T &x) {
    char c;int f{1};
    do x=(c=getchar())^48;
    while (!isdigit(c)&&c!='-');
    if (x==29) f=-1,x=0;
    while (isdigit(c=getchar()))
        x=(x*10)+(c^48);
    x*=f;
}
template <typename T,typename ...Args>
void read(T& x,Args&... args) {read(x);read(args...);}
constexpr int N(1e6);
int f[N+5],s[N+5];
bool l[N+5];
int find(int x) {
    while (x!=f[x]) x=f[x]=f[f[x]];
    return x;
}
void merge(int x,int y) {
    if (x==y) {
        l[find(x)]=true;
        --s[find(x)];
        return;
    }
    x=find(x);y=find(y);
    --s[x];
    if (x==y) return;
    s[y]+=s[x];
    l[y]|=l[x];
    f[x]=y;
}
int main() {
    int T;read(T);
    while (T--) {
        int n;read(n);
        // fill_n(a+1,n,0);
        // for (int i{1};i<=n;++i) e[i].clear();
        // using P=pair<int,int>;
        // priority_queue<P,vector<P>,greater<P>> q;
        iota(f,f+1+n,0);
        fill(s,s+1+n,1);
        merge(0,0);
        for (int i{1};i<=n;++i) {
            int l,r;
            read(l,r);
            merge(l-1,r);
        }
        int ans{1};
        for (int i{0};i<=n;++i)
            if (find(i)==i) {
                if (s[i]<0) ans=-1;
                else if (s[i]==0&&!l[i]) ans=min(ans,0);
            }
        cout<<max(ans,0)<<"\n";
        // for (int i{1};i<=n;++i) {
        //     for (auto v:e[i]) q.emplace(r[v],v);
        //     if (q.empty()) {
        //         puts("0");
        //         goto bed;
        //     }
        //     int p{q.top().first};q.pop();
        //     if (p<i) {
        //         puts("0");
        //         goto bed;
        //     }
        // }
        // for (int i{1};i<=n;++i)
        //     for (int j{i+1};j<=n;++j)
        //         if (a[i]==a[j]) {
        //             cout<<"0\n";
        //             goto bed;
        //         }
        // cout<<"1\n";
        // bed:;
    }
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 1ms
memory: 7692kb

input:

4
5
1 2
1 5
1 2
1 2
2 2
5
1 1
2 4
2 3
5 5
3 4
5
3 5
1 2
3 4
3 5
3 3
5
1 5
1 4
4 5
5 5
1 2

output:

0
1
0
0

result:

ok 4 tokens

Test #2:

score: -100
Wrong Answer
time: 34ms
memory: 6624kb

input:

66725
14
7 7
4 6
7 8
8 13
2 13
6 13
6 10
14 14
1 10
9 11
7 9
3 8
4 12
5 12
12
2 6
3 6
7 11
2 5
1 1
6 12
8 12
2 3
7 9
7 8
1 10
1 4
10
4 8
4 4
6 10
9 10
2 3
2 7
1 3
3 4
2 2
3 10
20
3 12
10 14
19 20
19 20
1 9
7 9
13 16
17 17
16 18
2 11
5 19
6 17
11 17
3 6
3 11
7 20
8 17
3 18
10 15
9 20
16
5 10
2 10
2 1...

output:

1
1
0
0
1
0
1
1
0
1
1
0
0
0
0
0
1
0
1
0
0
1
0
0
0
1
0
1
0
0
0
0
1
0
1
1
1
1
1
0
1
0
1
1
1
1
1
1
1
1
0
1
1
0
0
0
0
0
0
1
0
1
1
0
1
1
1
0
1
0
1
0
0
0
1
1
1
0
0
1
1
1
1
0
1
1
1
1
1
1
1
0
1
0
0
1
1
0
0
1
1
0
1
1
1
1
1
1
1
0
0
1
1
1
0
0
1
1
0
0
1
0
1
0
1
0
1
0
0
0
0
0
0
0
0
1
1
1
1
1
0
0
0
1
0
0
1
0
1
1
...

result:

wrong answer 103rd words differ - expected: '0', found: '1'