比赛 2024暑期C班集训3 评测结果 AAAAAAAAATAATTTTTTTT
题目名称 不是一道路径查询问题 最终得分 55
用户昵称 liuyiche 运行时间 9.599 s
代码语言 C++ 内存使用 11.28 MiB
提交时间 2024-07-03 11:16:12
显示代码纯文本
#include <bits/stdc++.h>
                
using namespace std;

typedef long long ll;

int n, m, q;
bool vis[100010];
ll V;

struct node
{
    vector<int> nxt;
    vector<ll> w;
};
vector<node> p(100010);

ll f[1005][1005];

inline void dfs(int st, int x, ll cnt)
{
    vis[x] = 1;
    f[st][x] = max(f[st][x],cnt);
    for(int i = 0; i < p[x].nxt.size(); ++i)
    {
        if(vis[p[x].nxt[i]] == 0)
        {
            if(cnt == -1)
                dfs(st,p[x].nxt[i],p[x].w[i]);
            else
                dfs(st,p[x].nxt[i],cnt&p[x].w[i]);
        }
    }
    vis[x] = 0;
}

int main()
{
    freopen("Paths.in", "r", stdin);
    freopen("Paths.out", "w", stdout);
            
    ios::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
    
    cin >> n >> m >> q >> V;
    for(int i = 1; i <= m; ++i)
    {
        int u, v;
        ll w;
        cin >> u >> v >> w;
        p[u].nxt.push_back(v);
        p[v].nxt.push_back(u);
        p[u].w.push_back(w);
        p[v].w.push_back(w);
    }
    for(int i = 1; i <= n; ++i)
        dfs(i,i,-1);
    /*for(int i = 1; i <= n; ++i)
    {
        for(int j = 1; j <= n; ++j)
            cout << f[i][j] << " ";
        cout << '\n';
    }*/
    for(int i = 1; i <= q; ++i)
    {
        int u, v;
        cin >> u >> v;
        if(f[u][v] >= V)
            cout << "Yes" << '\n';
        else
            cout << "No" << '\n';
    }
        
   	return 0;
}