1 / 4
Mar 2024
#include <bits/stdc++.h>
using namespace std;

#define int long long
#define vi vector<int>
#define vvi vector<vector<int>>
#define vii vector<pair<int, int>>
#define pii pair<int, int>
#define vc vector<char>
#define rep(i, a, b) for (int i = a; i < b; i++)
#define ff first
#define ss second
#define all(x) ((x).begin(), (x).end())
#define input(x)      \
    for (auto &i : x) \
    cin >> i

const int N = 1e3 + 2, MOD = 1e9 + 7;

bool solve(vvi &adj, int n, vi &stren, vector<bool> &visi)
{
    // rep(i, 0, n)
    // {
    //     cout << stren[i] << " ";
    // }
    // cout << endl;

    rep(s, 1, n + 1)
    {
        // cout << "src : " << s << endl;
        bool flag = false;
        vi d(n + 1, 0);
        vi visited(n+1 , 0);
        queue<int> q;
        // vi divi;

        if (visi[s] && stren[s] >= 0)
        {
            // cout << "1" << endl;
            return false;
        }
        else if (!visi[s] && stren[s] >= 0)
        {
            visi[s] = true;
            visited[s] = 1;
            int temp;
            q.push(s);
            // divi.push_back(s);
            // rep(i, 1, n + 1)
            // {
            //     cout << d[i] << " ";
            // }
            // cout << endl;
            while (!q.empty() && stren[s] > 0)
            {
                // for(auto i : divi) cout << i << " ";
                // cout << endl;
                temp = q.front();
                // cout << "temp : " << temp << endl;
                q.pop();
                // divi.erase(divi.begin());
                for (auto i : adj[temp])
                {
                    // cout << "i : " << i << endl;
                    d[i] = d[temp] + 1;
                    if (d[i] > stren[s])
                    {
                        flag = true;
                        break;
                    }
                    else if (!visi[i] && stren[i] >= 0)
                    {
                        // cout << "2" << endl;
                        return false;
                    }
                    if (visi[i] && visited[i] == 0)
                    {
                        // cout << "3" << endl;
                        return false;
                    }
                    
                    
                    else if(!visited[i])
                    {
                        visi[i] = true;
                        visited[i] = 1;
                        q.push(i);
                        // divi.push_back(i);
                        // rep(i, 1, n + 1)
                        // {
                        //     cout << d[i] << " ";
                        // }
                        // cout << endl;
                    }
                }
                if (flag)
                    break;
            }
        }
    }
    rep(i , 1 , n+1)
    {
        if(visi[i] == false) return false;
    }
    return true;
}

signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int t;
    cin >> t;

    while (t--)
    {
        int n, r, m;
        cin >> n >> r >> m;
        // if(n == 1)
        // {
        //     if(m == 1)
        //     {
        //         cout << "Yes"
        //     }
        // }
        vvi adj(n + 1);

        int a, b;
        rep(i, 0, r)
        {
            cin >> a >> b;
            adj[a].push_back(b);
            adj[b].push_back(a);
        }

        int s, k;
        vi stren(n + 1, -1);
        vector <bool> check(n+1 , 0);
        bool flag = false;
        rep(i, 0, m)
        {
            cin >> k >> s;
            if(check[k]) flag = true;

            check[k] = true;
            
            stren[k] = s;
            
        }
        vector<bool> visi(n + 1, false);
        if(flag)
        {
            cout << "No" << endl;
            continue;
        }
        if (solve(adj, n, stren, visi))
        {
            cout << "Yes" << endl;
        }
        else
        {
            cout << "No" << endl;
        }
    }

    return 0;
}
  • created

    Mar '24
  • last reply

    Mar '24
  • 3

    replies

  • 335

    views

  • 2

    users

8 days later

When I tested it, it gave No, when the correct answer is Yes.