社区讨论

初学最短路,为啥只有40分

P1613跑路参与者 4已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@locuhvdj
此快照首次捕获于
2023/10/30 19:57
2 年前
此快照最后确认于
2023/11/05 06:32
2 年前
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;
long long int u[10001],v[10001],i,j,n,m,dis[10001],t[10001],s,t1[10001];
int main()
{
    cin>>n>>m;
    for(i=1;i<=m;i++)
        cin>>u[i]>>v[i];
    for(i=1;i<=n;i++)
        dis[i]=9999999;
    dis[1]=0;
    for(i=1;i<=n-1;i++)
        for(j=1;j<=m;j++)
        {
            s=1;
            dis[v[j]]=dis[u[j]]+1;
            if(t[v[j]]==0)
                while(dis[v[j]]!=0)
                {
                    if(dis[v[j]]-s>=0)
                        s=s*2;
                    else
                    {
                   dis[v[j]]=dis[v[j]]-s/2;
                        s=1;
                        t[v[j]]++;
                    }
                }
            else
            {
                while(dis[v[j]]!=0)
                {
                    if(dis[v[j]]-s>=0)
                        s=s*2;
                    else
                    {
                   dis[v[j]]=dis[v[j]]-s/2;
                        s=1;
                        t1[v[j]]++;
                    }
                }
                if(t1[v[j]]<t[v[j]])
                    t[v[j]]=t1[v[j]];
            }
        }
    cout<<t[n];
    return 0;
}

回复

3 条回复,欢迎继续交流。

正在加载回复...