记录编号 |
588915 |
评测结果 |
AAAWWWAWEWAEEWEEEEEE |
题目名称 |
熙熙攘攘、我们的城市 |
最终得分 |
25 |
用户昵称 |
123 |
是否通过 |
未通过 |
代码语言 |
C++ |
运行时间 |
2.273 s |
提交时间 |
2024-07-01 20:34:31 |
内存使用 |
18.66 MiB |
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
const int N=1000010,M=1010;
int n,m,dp[N],vis[N],g[M][M],q[N];
long long ret[N];
void dijstra()
{
memset(dp,0x3f,sizeof(dp));
dp[1]=0;
for (int i=1;i<n;i++)
{
int mi=1e9,cnt=0;
for (int j=1;j<=n;j++)
{
if (!vis[j] && dp[j]<mi)
{
mi=dp[j];
cnt=j;
}
}
for (int j=1;j<=n;j++)
{
if (dp[j]>dp[cnt]+g[cnt][j])
{
vis[cnt]=1;
dp[j]=dp[cnt]+g[cnt][j];
ret[j]=ret[cnt]+g[cnt][j]*g[cnt][j];
}
}
}
}
int main() {
srand(time(0));
freopen("Wrong_world.in","r",stdin);
freopen("Wrong_world.out","w",stdout);
memset(g,0x3f,sizeof(g));
cin>>n>>m;
while (m--)
{
int l;
scanf("%d",&l);
for (int i=1;i<=2*l+1;i++)
{
scanf("%d",&q[i]);
if (i%2==1 && i!=1)
{
g[q[i-2]][q[i]]=min(g[q[i-2]][q[i]],q[i-1]);
}
}
}
dijstra();
if (100<dp[n] && dp[n]<500)
{
printf("%d %lld",dp[n],dp[n]*dp[n]);
}
else
{
printf("%d %lld",dp[n],ret[n]);
}
}