最后四个点MLE求助
查看原帖
最后四个点MLE求助
244309
yuhaocheng楼主2021/8/18 00:46
#include <bits/stdc++.h>
using namespace std;

#define mp(i, j) pair<int, int>(i, j)

typedef long long ll;

const int maxsize = 100005;
map<pair<int, int>, bool> w; //存节点间是否有连接
bool vis[maxsize][2];
ll d[maxsize][2];
int n, m, q;
int u, v;
int a;
ll l;
int mink, minn;
bool state;
ll tmp;

int main()
{
    cin >> n >> m >> q;
    memset(vis, 0, sizeof(vis));
    memset(d, 0x3f, sizeof(d));
    d[1][0] = 0;
    for (int i = 1; i <= m; i++)
    {
        cin >> u >> v;
        w[mp(u, v)] = true;
        w[mp(v, u)] = true;
    }
    for (int i = 1; i <= 2 * n; i++) //Dijkstra
    {
        minn = 0x3f3f3f3f;
        state = 0;
        for (int j = 1; j <= n; j++) //找d最小的节点
        {
            if (!vis[j][0] && d[j][0] <= minn)
                mink = j, minn = d[j][0], state = 0;
            if (!vis[j][1] && d[j][1] <= minn)
                mink = j, minn = d[j][1], state = 1;
        }
        vis[mink][state] = 1;
        for (int j = 1; j <= n; j++)
        {
            if (w[mp(mink, j)])
            {
                tmp = d[mink][state] + 1;
                d[j][tmp % 2] = min(d[j][tmp % 2], tmp); //更新
            }
        }
    }
    for (int i = 1; i <= q; i++)
    {
        cin >> a >> l;
        if ((d[a][l % 2] <= 0x3f3f3f3f) && (d[a][l % 2] <= l))
            cout << "Yes" << endl;
        else
            cout << "No" << endl;
    }
}

2021/8/18 00:46
加载中...