QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#174426#6634. Central SubsetPERAPRO#RE 1ms3456kbC++141.9kb2023-09-10 07:28:362023-09-10 07:28:37

Judging History

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

  • [2023-09-10 07:28:37]
  • 评测
  • 测评结果:RE
  • 用时:1ms
  • 内存:3456kb
  • [2023-09-10 07:28:36]
  • 提交

answer

#include <bits/stdc++.h>
#include <ios>
#define ll long long int
#define ii pair<int, int>
#define ff first
#define ss second
#define vi vector<ll>
#define lli long long
#define vii vector<ii>
#define pb push_back
#define fast_io                                                                \
  ios_base::sync_with_stdio(0);                                                \
  cin.tie(0);                                                                  \
  cout.tie(0);
using namespace std;

const int N = 2e5;
const ll MOD = 1e9 + 7;
const int oo = 1e9 + 7;
vi dis;
vector<bool> vis;
vector<vi> g;
int leaf = 0;
int root;

void dfs(int s, int p) {
  for (int veci : g[s]) {
    if (dis[veci] > dis[s] + 1) {
      dis[veci] = dis[s] + 1;
      if (dis[veci] > dis[leaf])
        leaf = veci;
      dfs(veci, s);
    }
  }
}

vi ans;
void bfs(int s) {
  queue<int> q;
  q.push(s);
  dis[s] = 0;
  ans.pb(s);
  vis[s] = 1;
  while (q.size()) {
    int cur = q.front();
    q.pop();
    bool flag = 0;
    for (int veci : g[cur]) {
      if (!vis[veci]) {
        if(flag){
            dis[veci] = 2;
        }else if(dis[cur] == root){
            ans.pb(veci + 1);
            flag = 1;
            dis[veci] = 0;
        }else{
            dis[veci] = dis[cur] + 1;
        }
        q.push(veci);
        vis[veci] = 1;
      }
    }
  }
}

int main() {
  int tc;
  cin >> tc;
  while (tc--) {
    int n, m;
    cin >> n >> m;
    root = sqrt(n);
    ans.clear();
    if(root*root != n)root++;
    g.resize(n);
    for (int i = 0; i < m; i++) {
      int u, v;
      cin >> u >> v;
      u--;
      v--;
      g[u].pb(v);
      g[v].pb(u);
    }
    dis.assign(n, oo);
    dis[0] = 0;
    dfs(0, 0);
    dis.assign(n, oo);
    vis.assign(n, false);
    bfs(leaf);
    cout<<ans.size()<<endl;
    for(int i:ans){
        cout<<i<<" ";
    }
    cout<<endl;
  }
  return 0;
}


详细

Test #1:

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

input:

2
4 3
1 2
2 3
3 4
6 7
1 2
2 3
3 1
1 4
4 5
5 6
6 4

output:

2
3 1 
1
5 

result:

ok correct (2 test cases)

Test #2:

score: -100
Runtime Error

input:

10000
15 14
13 12
5 4
9 8
11 12
15 14
10 9
14 13
2 3
2 1
6 5
10 11
3 4
7 6
8 7
6 5
2 1
2 4
4 6
2 3
3 5
10 9
8 3
9 4
5 6
5 10
3 2
5 4
2 7
1 2
4 3
2 1
2 1
2 1
2 1
9 8
9 8
5 4
1 2
6 5
3 4
3 2
7 8
7 6
2 1
1 2
14 13
3 10
5 6
2 9
11 4
2 3
2 1
8 7
13 6
5 4
5 12
6 7
4 3
7 14
16 15
2 3
2 1
6 10
6 9
6 4
9 11
...

output:

3
14 10 5 

result: