社区讨论

90分,求大神修改

P1608路径统计参与者 2已保存回复 1

讨论操作

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

当前回复
1 条
当前快照
1 份
快照标识符
@mi4hly6p
此快照首次捕获于
2025/11/18 19:25
4 个月前
此快照最后确认于
2025/11/18 19:25
4 个月前
查看原帖
CPP
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
const int N=2001,inf=1e9+7,M=1999001;
int n,m,cnt,tot,first[N],dis[N],f[N];
bool record[N][N],in[N];
struct edge{
    int v,d,next;
}e[M];
queue <int> q;
void bfs()
{
    int i,j,k,u,v,d;
    fill(dis+1,dis+n+1,inf);
    dis[1]=0;
    f[1]=1;
    q.push(1);
    in[1]=1;
    while(!q.empty())
    {
        u=q.front();
        q.pop();
        in[u]=0;
        for(i=first[u];i!=0;i=e[i].next)
        {
            v=e[i].v;
            if(dis[v]>dis[u]+e[i].d)
            {
                dis[v]=dis[u]+e[i].d;
                f[v]=f[u];
                if(!in[v])q.push(v),in[v]=1;
            }
            else if(dis[v]==dis[u]+e[i].d)
            {
                f[v]+=f[u];
                if(!in[v])q.push(v),in[v]=1;
            }
        }
    }
}
int main()
{
    int i,j,k,u,v,d;
    freopen("count1.in","r",stdin);
    scanf("%d%d",&n,&m);
    for(i=1;i<=m;i++)
    {
        scanf("%d%d%d",&u,&v,&d);
        if(!record[u][v])
        {
            e[++cnt].v=v;
            e[cnt].d=d;
            e[cnt].next=first[u];
            first[u]=cnt;
            record[u][v]=1;
        }
    }
    bfs();
    if(dis[n]==inf)printf("No answer\n");
    else printf("%d %d\n",dis[n],f[n]);
    return 0;
}

回复

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

正在加载回复...