求调,最后4个点MLE
查看原帖
求调,最后4个点MLE
540870
Yzmddsw楼主2023/10/1 15:58

rt,或者也可以告诉一下MLE的原因

#include <iostream>
#include <cstdio>
#include <iomanip>
#include <cmath>
#include <bitset>
#include <algorithm>
#include <set>
#include <unordered_set>
#include <map>
#include <unordered_map>
#include <vector>
#include <queue>
#include <stack>
#include <cstring>
#include <string>
#define FOR(i, m, n) for (long long i = m; i <= n; i++)
#define FRO(i, m, n) for (long long i = m; i >= n; i--)
#define ll int
#define ull unsigned long long
#define uint unsigned int
#define mp(a, b) make_pair(a, b)
#define INF 2147483647
#define INFF 0x3f3f3f3f3f3f3f3f
#define INFFF 0x7fffffffffffffff
using namespace std;
const int maxn = 100010;
const int num = 1;
int head[maxn], nxt[maxn * num], to[maxn * num], tot;
bool v1[maxn],v2[maxn];
int dist1[maxn],dist2[maxn];
int a, b;
void add(int u, int v)
{
    to[++tot] = v;
    nxt[tot] = head[u];
    head[u] = tot;
    return;
}
queue<pair<ll, ll>> q;
void bfs()
{
    q.push(mp(1,0));
    while (!q.empty())
    {
        
        ll y = q.front().first;
        ll nw = q.front().second;
        // cout<<y<<" "<<nw<<endl;
        q.pop();
        if(nw%2==1&&!v1[y]){
            v1[y]=1;
            for (int i = head[y]; i; i = nxt[i])
            {
                int z = to[i];
                if(v2[z])continue;
                dist1[z]=dist2[y]+1;
                q.push(mp(z, 0));
            }
        }
        else if(nw%2==0&&!v2[y])
        {
            if(v2[y])continue;
            v2[y]=1;
            for (int i = head[y]; i; i = nxt[i])
            {
                int z = to[i];
                
                if(v1[z])continue;
                dist2[z]=dist1[y]+1;
                q.push(mp(z, 1));
            }
        }
    }
}
int main()
{
    ll n, m, q;
    cin >> n >> m >> q;
    FOR(i, 1, m)
    {
        ll u, v;
        cin >> u >> v;
        add(u, v);
        add(v, u);
    }
    bfs();
    FOR(i, 1, q)
    {
        ll a, b;
        cin >> a >> b;
        if(dist1[a]<=b&&dist1[a]%2==b%2){
            cout<<"Yes"<<endl;
        }
        else if(dist2[a]<=b&&dist2[a]%2==b%2){
            cout<<"Yes"<<endl;
        }
        else cout<<"No"<<endl;
    }
    return 0;
}

2023/10/1 15:58
加载中...