Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- using namespace std;
- void solve() {
- int n, m;
- cin >> n >> m; // считываем кол-во вершин и рёбер в графе
- vector<vector<int>> G(n, vector<int>(n)); // G[i][j] - кол-во рёбер i -> j в графе
- for (int i = 0; i < m; ++i) { // Итерируемся по рёбрам
- int a, b;
- cin >> a >> b; // считываем начало и коней i-го ребра
- // Уменьшаем a и b на 1, так как в задаче нумерация вершин идёт с 1, а нам удобнее, если бы она шла с 0
- a--;
- b--;
- G[a][b]++; // Если G[a][b] = x, то в графе есть x рёбер, которые начинаются в a и заканчиваются в b
- }
- for (int i = 0; i < n; ++i) { // Перебираем 1-ую вершину для проверки
- for (int j = 0; j < n; ++j) { // Перебираем 2-ую вершину для проверки
- if (i == j) { // Пропускаем ребра, являющиеся петлями (По условию)
- continue;
- }
- if (!(G[i][j] >= 1 || G[j][i] >= 1)) { // Если у пары {i; j} нет ребра, то выводим "NO" и завершаемся
- cout << "NO";
- return;
- }
- }
- }
- cout << "YES"; // Выводим, что граф полуполный, если ни одна из проверок не выявила обратного
- }
- int main() {
- solve();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement