QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#307183#5423. Perfect MatchinghuzhaoyangAC ✓582ms27572kbC++141.6kb2024-01-18 09:36:272024-01-18 09:36:27

Judging History

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

  • [2024-01-18 09:36:27]
  • 评测
  • 测评结果:AC
  • 用时:582ms
  • 内存:27572kb
  • [2024-01-18 09:36:27]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
const int N=200005;
int t,n,a[N],dfn[N];
vector<int>vx,vy;
vector<pair<int,int> >ans,e[N];
bool dfs(int k,int id){
    vector<int>v;
    dfn[k]=++dfn[0];
    for(pair<int,int>i:e[k]){
        int x=i.first,y=i.second;
        if (y==id)continue;
        if (!dfn[x]){
            if (dfs(x,y))v.push_back(y);
        }
        else{
            if (dfn[k]<dfn[x])v.push_back(y);
        }
    }
    bool flag=1;
    if (v.size()&1)flag=0,v.push_back(id);
    for(int i=0;i<v.size();i+=2)ans.push_back(make_pair(v[i],v[i+1]));
    return flag;
}
int main(){
    scanf("%d",&t);
    while (t--){
        scanf("%d",&n);
        vx.clear(),vy.clear();
        for(int i=1;i<=n;i++){
            scanf("%d",&a[i]);
            vx.push_back(a[i]-i);
            vy.push_back(a[i]+i);
        }
        sort(vx.begin(),vx.end());
        sort(vy.begin(),vy.end());
        for(int i=0;i<=(n<<1);i++)dfn[i]=0,e[i].clear();
        for(int i=1;i<=n;i++){
            int x=lower_bound(vx.begin(),vx.end(),a[i]-i)-vx.begin()+1;
            int y=lower_bound(vy.begin(),vy.end(),a[i]+i)-vy.begin()+1;
            e[x].push_back(make_pair(y+n,i));
            e[y+n].push_back(make_pair(x,i));
        }
        bool flag=0;
        ans.clear();
        for(int i=1;i<=(n<<1);i++)
            if (!dfs(i,0)){
                flag=1,puts("No");
                break;
            }
        if (!flag){
            puts("Yes");
            for(pair<int,int>i:ans)printf("%d %d\n",i.first,i.second);
        }
    }
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 2ms
memory: 8464kb

input:

3
6
14 22 33 11 25 36
4
100 10 98 12
4
1 3 5 7

output:

Yes
1 4
2 5
3 6
Yes
2 4
1 3
No

result:

ok 3 Cases (3 test cases)

Test #2:

score: 0
Accepted
time: 264ms
memory: 23536kb

input:

10
100000
0 -1 -2 -3 -4 -5 -2 -7 -8 -9 -10 -9 -12 13 14 15 -16 -17 -18 19 20 19 -22 -21 -20 -25 -26 -27 -28 -27 -26 31 30 29 -34 -35 -34 39 38 37 42 41 42 47 44 45 46 49 48 -53 -52 -51 -56 -55 -54 55 56 57 -58 -59 -60 61 62 63 64 65 64 67 66 69 70 73 72 73 74 73 76 75 74 79 80 81 -84 -83 -84 89 86 8...

output:

Yes
79 139
202 244
289 310
316 322
337 382
397 451
460 463
481 517
520 526
556 568
619 661
736 763
790 853
904 934
979 988
1090 1105
1162 1219
1273 1285
1294 1405
1411 1456
1459 1531
1555 1561
1588 1615
1618 1630
1651 1669
1684 1723
1738 1915
1972 2026
2029 2092
2155 2197
2290 2305
2350 2353
2419 24...

result:

ok 10 Cases (10 test cases)

Test #3:

score: 0
Accepted
time: 0ms
memory: 8484kb

input:

10
100
28761184 28761185 28761186 28761187 28761188 28761189 28761190 28761191 -20675012 -20675013 -20675014 -20675015 -20675016 -20675017 -20675018 -20675019 -20675020 -20675021 -20675022 -20675023 -20675024 -20675025 -20675026 -20675027 -20675028 -20675029 -20675030 -20675031 -36758138 -36758139 -...

output:

Yes
39 40
41 42
43 44
45 46
47 48
49 50
51 52
53 54
55 56
57 58
29 30
31 32
33 34
75 76
77 78
79 80
81 82
83 84
85 86
87 88
89 90
91 92
93 94
95 96
97 98
99 100
9 10
11 12
13 14
15 16
17 18
19 20
21 22
23 24
25 26
27 28
59 60
61 62
63 64
65 66
67 68
35 36
37 38
1 2
3 4
5 6
7 8
69 70
71 72
73 74
Yes
...

result:

ok 10 Cases (10 test cases)

Test #4:

score: 0
Accepted
time: 228ms
memory: 27572kb

input:

10
100000
-40608960 -40608959 -40608958 -40608957 -40608956 -40608955 -40608954 -40608953 -40608952 -40608951 -40608950 -40608949 -40608948 -40608947 -40608946 -40608945 -40608944 -40608943 -40608942 -40608941 -40608940 -40608939 -40608938 -40608937 -40608936 -40608935 -40608934 -40608933 -40608932 ...

output:

Yes
29329 29330
29331 29332
29333 29334
29335 29336
29337 29338
29339 29340
29341 29342
29343 29344
29345 29346
29347 29348
29349 29350
29351 29352
71753 71754
71755 71756
71757 71758
71759 71760
71761 71762
71763 71764
71765 71766
71767 71768
71769 71770
71771 71772
71773 71774
71775 71776
71777 71...

result:

ok 10 Cases (10 test cases)

Test #5:

score: 0
Accepted
time: 582ms
memory: 25704kb

input:

10
100000
0 -1 -2 3 2 5 6 7 -2 1 0 9 12 11 -8 13 8 -7 16 17 -10 19 22 21 22 23 4 -15 -18 -17 -6 -31 -14 25 32 -25 26 27 -32 31 38 -31 -32 -19 -30 -35 46 45 -48 -37 48 41 46 -43 -44 53 56 55 50 -27 52 61 62 -33 -18 19 64 45 46 -57 -8 -25 -26 -11 -22 49 -66 -65 -66 29 78 -15 74 83 12 83 14 85 86 -7 -5...

output:

Yes
8564 26518
63463 1121
36817 129
8931 95315
89504 28
70110 81303
13611 16772
34736 778
88310 80993
11544 74032
33052 80608
3199 1661
47380 3633
3408 19162
59542 87006
97729 416
62860 73052
35450 56229
55641 9450
99552 2005
84101 4926
81132 92548
41302 83637
92168 28333
71221 3610
78597 37367
6544...

result:

ok 10 Cases (10 test cases)

Test #6:

score: 0
Accepted
time: 172ms
memory: 10044kb

input:

1000
1000
-2 0 3 4 6 7 4 7 6 9 11 9 10 12 16 13 16 17 18 20 19 19 24 22 25 23 28 25 26 27 30 32 31 34 36 37 34 37 37 40 42 43 44 45 43 44 46 45 50 48 51 49 54 55 52 55 54 57 56 61 60 61 64 65 64 67 65 66 67 68 71 73 73 75 76 77 78 75 76 78 82 79 80 81 83 83 87 88 90 89 90 93 92 93 95 94 96 96 100 97...

output:

No
No
No
No
No
No
Yes
3 5
26 28
29 38
41 43
45 49
57 68
70 71
74 83
87 112
118 119
122 124
126 129
134 139
141 142
143 146
151 165
170 175
177 178
183 184
200 203
205 208
212 219
220 226
243 257
266 268
270 273
274 277
284 285
298 300
312 313
323 324
326 328
332 335
339 345
354 359
361 365
366 370
3...

result:

ok 1000 Cases (1000 test cases)