社区讨论
求助记忆化为什么不行
P1144最短路计数参与者 2已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @mhjsfdg6
- 此快照首次捕获于
- 2025/11/04 07:45 4 个月前
- 此快照最后确认于
- 2025/11/04 07:45 4 个月前
代码如下,求大佬解答,感激不尽!
CPP#include <bits/stdc++.h>
#define endl '\n'
using namespace std;
typedef long long LL;
typedef pair<int,int> PII;
const int INF = 1e9;
const int N = 1e6+10,M = 2e6+10;
const int mod = 100003;
int h[N],ne[2*M],e[2*M],idx;
int rh[N];
class solution
{
public:
void solve();
};
void add(int a,int b)
{
e[idx]=b,ne[idx]=h[a],h[a]=idx++;
e[idx]=a,ne[idx]=rh[b],rh[b]=idx++;
}
void solution::solve()
{
memset(h,-1,sizeof h);
memset(rh,-1,sizeof rh);
int n,m;cin>>n>>m;
for(int i=1;i<=m;i++)
{
int a,b;cin>>a>>b;
if(a==b)continue;
add(a,b);
}
vector<int>dis(n+1,INF);
auto dijkstra=[&](int st)
{
queue<int>q;
vector<bool>vis(n+1,0);
q.push(st);
dis[st]=0;
while(q.size())
{
int p = q.front();
q.pop();
if(vis[p])continue;
vis[p]=1;
for(int i=h[p];~i;i=ne[i])
{
int v=e[i];
if(dis[v]>dis[p]+1)
{
dis[v]=dis[p]+1;
q.push(v);
}
}
}
};
dijkstra(1);
// for(int i=1;i<=n;i++)
// cout<<dis[i]<<' ';
vector<LL>f(n+1,-1);
function<LL(int)>dfs=[&](int u)
{
if(f[u]!=-1)return f[u];
f[u]=0;
// cout<<u<<endl;
for(int i=rh[u];~i;i=ne[i])
{
int v=e[i];
// cout<<dis[v]<<' ';
if(dis[v]==dis[u]-1)
{
f[u] = (f[u] + dfs(v))%mod;
}
}
// cout<<endl;
return f[u];
};
f[1]=1;
for(int i=1;i<=n;i++)
cout<<dfs(i)<<endl;
}
signed main()
{
ios_base::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);
int T = 1;
solution AC;
//cin>>T;
while(T --)
{
AC.solve();
}
return 0;
}
回复
共 4 条回复,欢迎继续交流。
正在加载回复...