QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#735481 | #9525. Welcome to Join the Online Meeting! | Foedere0 | WA | 3ms | 10000kb | C++20 | 3.5kb | 2024-11-11 20:17:15 | 2024-11-11 20:17:15 |
Judging History
answer
#include <bits/stdc++.h>
// #define endl '\n'
#define int long long
using namespace std;
typedef pair<int, int> PII;
const int N = 1000010;
int p[N], sz[N];
int a[N];
unordered_map<int, int> st;
int find(int x)
{
if (p[x] != x)
p[x] = find(p[x]);
return p[x];
}
vector<int> ans[N];
vector<int> res;
vector<int> r;
unordered_map<int, int> mp;
void solve()
{
int n, m, k;
cin >> n >> m >> k;
for (int i = 1; i <= n; i++)
{
p[i] = i;
sz[i] = 1;
ans[i].push_back(i);
}
for (int i = 1; i <= k; i++)
{
cin >> a[i];
st[a[i]] = 1;
}
vector<PII> op;
while (m--)
{
int x, y;
cin >> x >> y;
if (st[x] == 1 && !st[y])
{
st[x] = 2;
ans[y].push_back(x);
if (!mp[y])
{
mp[y] = 1;
r.push_back(y);
}
}
if (st[y] == 1 && !st[x])
{
st[y] = 2;
ans[x].push_back(y);
if (!mp[x])
{
mp[x] = 1;
r.push_back(x);
}
}
if (!st[y] && !st[x])
{
op.push_back({x, y});
}
}
int x = 0;
for (int i = 1; i <= n; i++)
{
if (!st[i])
{
x = i;
break;
}
}
if (x == 0)
{
cout << "No" << endl;
return;
}
int cnt = 0;
// sort(op.begin(), op.end());
int t = 0;
for (auto [x, y] : op)
{
if (sz[x] < sz[y])
{
swap(x, y);
}
if (find(y) != find(x))
{
t = x;
if (!st[x])
{
st[x] = 1;
res.push_back(x);
}
for (auto t : ans[y])
{
ans[x].push_back(t);
}
// ans[x].push_back(y);
sz[x] += sz[y];
p[find(y)] = find(x);
cnt++;
}
if (cnt == n - k - 1)
break;
}
if (cnt < n - k - 1)
{
cout << "No" << endl;
return;
}
for (int i = 1; i <= k; i++)
{
if (st[a[i]] != 2)
{
cout << "No" << endl;
return;
}
}
cout << "Yes" << endl;
for (auto x : r)
{
if (!st[x])
{
st[x] = 1;
res.push_back(x);
}
}
// cout << t << endl;
queue<int> heap;
heap.push(t);
cnt = 0;
while (!heap.empty())
{
cnt++;
int o = heap.front();
// cout << o << endl;
heap.pop();
for (auto p : ans[o])
{
if (p == o)
continue;
if (ans[p].size() > 1)
heap.push(p);
}
}
cout << cnt << endl;
heap.push(t);
while (!heap.empty())
{
cnt++;
int o = heap.front();
heap.pop();
cout << o << " ";
cout << ans[o].size() - 1 << " ";
for (auto p : ans[o])
{
if (p == o)
continue;
cout << p << " ";
if (ans[p].size() > 1)
heap.push(p);
}
cout << endl;
}
}
signed main()
{
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int T = 1;
// cin >> T;
while (T--)
solve();
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 0
Wrong Answer
time: 3ms
memory: 10000kb
input:
4 5 2 3 4 1 2 1 3 2 3 3 4 2 4
output:
Yes 2 1 3 3 2 4 2 1 4
result:
wrong answer on step #1, member 4 is not friend of 1