QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#546787#4829. Mark on a Graphluqyou0 13ms11928kbC++142.0kb2024-09-04 13:39:212024-09-04 13:39:21

Judging History

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

  • [2024-09-04 13:39:21]
  • 评测
  • 测评结果:0
  • 用时:13ms
  • 内存:11928kb
  • [2024-09-04 13:39:21]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
#define fi first
#define sc second
#define pii pair<int,int>
#define pb push_back
const int maxn=1000+10;
int n,m,f[maxn][maxn],d[maxn],g[maxn][maxn],in[maxn];
mt19937_64 rd(time(0));
int getg(){ 
    for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) g[i][j]=0;
    for(int i=1;i<=n;i++) g[i][i]=1,in[i]=0;
    int rep=m;
    while(rep--){
        int u=rd()%n+1,v=rd()%n+1;
        while(g[u][v]) u=rd()%n+1,v=rd()%n+1;
        g[u][v]=g[v][u]=1,in[u]++,in[v]++;
    }
    int minn=1e9,mincnt=0;
    for(int i=1;i<=n;i++) minn=min(minn,in[i]);
    for(int i=1;i<=n;i++) mincnt+=(minn==in[i]);
//    cout<<mincnt<<endl;
    return mincnt;
}
void solve(){
    cin>>n>>m;
    for(int i=1,u,v;i<=m;i++) cin>>u>>v,f[u][v]=f[v][u]=1,d[u]++,d[v]++;
    int s=1e9,rep=50;
    while(rep--) s=min(s,getg());
    int minn=1e9,mini=0;
    for(int i=1;i<=n;i++){
        if(d[i]<minn) minn=d[i],mini=i;
    }
    int cnt=0;
    for(int i=1;i<=n;i++) cnt+=(d[i]==minn);
    for(int i=1;i<=n;i++) minn=min(minn,d[i]);
//    cout<<s<<" "<<cnt<<endl;
    if(minn==0&&cnt>=s+(m<=2500?4:(m<=3500?3:2))) return cout<<"ok"<<endl,void();
    cout<<"mark"<<endl;
    vector<pii> res;
    priority_queue<pii,vector<pii>,greater<pii> > q;
    for(int i=1;i<=n;i++) q.push({d[i],i});
    while(q.size()){
        int u=q.top().sc;
        q.pop();
        for(int i=1;i<=n;i++){
            if(f[i][u]){
                res.pb({i,u});
                if(res.size()==5) break;
            }
        }
        if(res.size()==5) break;
    }
    cout<<res.size()<<endl;
    for(pii p:res) cout<<p.fi<<' '<<p.sc<<endl;
}
int main(){
//	freopen("graph2.in","r",stdin);
//	freopen("graph.out","w",stdout);
    ios::sync_with_stdio(false);
    cin.tie(0),cout.tie(0);
    int t=1;
    // cin>>t;
    while(t--) solve();
    return 0;
}
/*
Samples
input:

output:

THINGS TODO:
妫€鏌reopen锛屽挨鍏舵槸鍚庣紑鍚?
妫€鏌ョ┖闂?
妫€鏌ヨ皟璇曡鍙ユ槸鍚﹀叏閮ㄦ敞閲?
*/

详细

Test #1:

score: 100
Accepted
time: 13ms
memory: 11928kb

input:

1000 3560
603 151
415 20
102 569
895 552
678 734
24 614
689 518
440 223
751 919
223 433
711 551
502 634
706 583
812 501
514 535
780 751
720 530
532 384
888 139
864 791
292 675
171 881
30 592
464 557
280 299
654 650
894 335
250 532
792 10
83 969
118 771
579 300
852 983
243 940
957 939
817 889
911 319...

output:

mark
5
812 501
386 655
353 691
817 762
826 862

input:

1000 3555
330 883
295 222
601 286
238 534
446 441
833 706
669 385
656 841
184 286
383 553
86 259
598 372
355 37
167 605
250 582
576 75
693 401
667 500
954 369
380 521
756 363
977 676
920 815
831 175
688 603
282 77
102 821
70 757
292 449
733 87
373 956
67 600
547 348
430 163
547 272
583 975
937 557
2...

output:

ok

result:

ok all right

Test #2:

score: 0
Wrong Answer on the first run

input:

1000 2000
457 335
160 497
464 992
892 255
853 3
308 301
970 363
541 299
89 418
425 128
626 827
603 854
484 874
755 295
607 483
798 552
356 850
320 357
254 940
675 901
168 525
301 636
520 555
773 910
343 701
889 966
218 529
909 950
71 64
682 284
424 138
721 792
670 544
386 72
654 909
725 235
592 437
...

output:

ok

input:


output:


result:

wrong answer Token "ok" doesn't correspond to pattern "mark"