UKIEPC 2023-K.Kernel Scheduler
难度 ☀️
类型
有向图
题意
[题目链接](Problem - K - Codeforces)
解题思路
仔细想想,这道题只会输出YES。
把有向图中的边分为两类,a < b 是A类, a > b 是B类, 最后保留数量较多的一类边即可
来自一名博客园大神的思路
以下是完整AC代码
#include<iostream>
#include<string>
#include<stack>
#include<queue>
#include<vector>
#include<map>
#include<algorithm>
#include<utility>
using namespace std;
int main() {
ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
int n, m;
cin >> n >> m;
vector<int> e1; // 记录 a < b 的边
vector<int> e2; // 记录 a > b 的边
for (int i = 0; i < m; i++) {
int a, b;
cin >> a >> b;
if (a > b) e1.push_back(i + 1);
else e2.push_back(i + 1);
}
int ans;
vector<int>* e; // 记录答案数组
if (e1.size() >= e2.size()) {
ans = e1.size();
e = &e1;
}
else { ans = e2.size(); e = &e2; }
cout << "YES\n";
cout << ans << "\n";
for (int i = 0; i < e->size(); i++) {
cout << (*e)[i];
if (i == e->size() - 1) cout << "\n";
else cout << " ";
}
return 0;
}
反思
刚看到这题,先想到的拓扑排序,后来发现不用那么麻烦, 浪费时间太多了,以后不能长时间纠结于一道题