deque bfs WA了
查看原帖
deque bfs WA了
282292
966123anyunchuan楼主2023/3/15 17:48
#include <bits/stdc++.h>

using namespace std;
const int N=1e3+10, M=1e4+10;
int n, m, k, val[M], dis[N];
bool vis[N];

struct edge{
    int to, w, t;
};
vector<edge> g[N];

int bfs()
{
    memset(vis, 0, sizeof(vis));
    deque <int> q;
    memset(dis, 0x3f, sizeof(dis));

    q.push_front(1); dis[1]=0, vis[1]=1;

    while(q.size())
    {
        int u=q.front(); q.pop_front();
        for(int i=1; i<g[u].size(); i++)
        {
            int v=g[u][i].to;
            if(!vis[v])
            {
                vis[v]=1;
                dis[v]=dis[u]+g[u][i].t;
                if(g[u][i].t)
                {
                    q.push_back(v);
                }else{
                    q.push_front(v);
                }
            }
        }
    }

    return dis[n];
}

bool check(int x)
{
    for(int u=1; u<=n; u++)
    {
        for(int i=0; i<g[u].size(); i++)
        {
//            int v=g[u][i].to;
            if(g[u][i].w>val[x]) g[u][i].t=1;
            else g[u][i].t=0;
        }
    }

    return bfs()<=k;
}

int main()
{
    scanf("%d%d%d", &n, &m, &k);
    for(int i=1; i<=m; i++)
    {
        int u, v, w;
        scanf("%d%d%d", &u, &v, &w);
        g[u].push_back((edge){v, w});
        g[v].push_back((edge){u, w});
        val[i]=w;
    }

    sort(val+1, val+m+1);

    int l=1, r=m;
    while(l<r)
    {
        int mid=(l+r)/2;
        if(check(mid))
        {
            r=mid;
        }else{
            l=mid+1;
        }
    }


    if(check(l))
    {
        printf("%d", val[l]);
    }else{
        puts("-1");
    }

    return 0;
}
2023/3/15 17:48
加载中...