結果
| 問題 | No.2900 Star Divine |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2024-09-20 10:12:06 |
| 言語 | C++17 (gcc 15.2.0 + boost 1.90.0) |
| 結果 |
AC
|
| 実行時間 | 34 ms / 2,000 ms |
| コード長 | 936 bytes |
| 記録 | |
| コンパイル時間 | 1,219 ms |
| コンパイル使用メモリ | 221,244 KB |
| 実行使用メモリ | 16,512 KB |
| 最終ジャッジ日時 | 2026-07-05 17:47:32 |
| 合計ジャッジ時間 | 3,281 ms |
|
ジャッジサーバーID (参考情報) |
judge3_0 / judge2_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 10 |
ソースコード
#include<bits/stdc++.h>
using namespace std;
#define N 100010
vector<int> g[N];
int n,m,k;
bool ok[N];
mt19937 rnd;
void work(){
scanf("%d%d%d",&n,&m,&k);
for(int i=1;i<=n;i++)g[i].clear();
for(int i=1;i<=k;i++){
int u,v;scanf("%d%d",&u,&v);g[u].push_back(v);
}
for(int i=1;i<=n;i++){
sort(g[i].begin(),g[i].end());g[i].erase(unique(g[i].begin(),g[i].end()),g[i].end());
}
while(1){
int ans=0;
for(int i=1;i<=m;i++)ok[i]=rnd()&1,ans+=ok[i];
int a0=0,a1=0;
for(int u=1;u<=n;u++){
bool z=0;
for(int v:g[u])z^=ok[v];
if(z)a1++;
else a0++;
}
if((a1+ans)*2>=(n+m)){
vector<int> vv;
for(int u=1;u<=n;u++){
bool z=0;
for(int v:g[u])z^=ok[v];
if(z)vv.push_back(u);
}
printf("%d %d\n",a1,ans);
for(int x:vv)printf("%d ",x);
printf("\n");
for(int i=1;i<=m;i++)if(ok[i])printf("%d ",i);
printf("\n");
break;
}
}
}
int main(){
int t;scanf("%d",&t);
while(t--)work();
}