1 条题解
-
1x_miracle LV 4 @ 2020-07-09 01:15:05
#include <bits/stdc++.h> #define MAXN 510 #define MAX 0x3f3f3f3f using namespace std; int ori=1,node; //ori 起点 node 节点数 int a[5005]; //存输入 int dis[MAXN],g[MAXN][MAXN]; bool vis[MAXN]; void init() { memset(vis,0,sizeof(vis)); memset(dis,0,sizeof(dis)); vis[ori]=1; for(int i=1;i<=node;++i) dis[i] = (i == ori ? 0 : g[ori][i]); } void Dijkstra() { int k; init(); for(int i=1;i<=node-2;++i) { int m=MAX; for(int j=1;j<=node;++j) { if(dis[j]<m && vis[j]==0) {m=dis[j]; k=j;} } if(m==MAX) break; vis[k]=1; for(int j=1;j<=node;++j) if(dis[k]+g[k][j]<dis[j]) dis[j]=dis[k]+g[k][j]; } return ; } int main() { int edge; scanf("%d%d",&edge,&node); for(int i=1;i<=node;++i) for(int j=1;j<=node;++j) g[i][j]=MAX; for(int i=1;i<=edge;++i) { memset(a,0,sizeof(a)); int n=0; //计数器 char c=1; while(c!=-1 && c!='\n') { scanf("%d",&a[ ++n ]); c=-1; scanf("%c",&c); } for(int j=1;j<n;++j) for(int k=j+1;k<=n;++k) g[ a[j] ][ a[k] ]=1; } Dijkstra(); if(dis[node]>=MAX) printf("NO"); else printf("%d",dis[node]-1); return 0; }
很神奇的是,VOJ上过了,洛谷却没过。。。
- 1
信息
- 难度
- 8
- 分类
- (无)
- 标签
- 递交数
- 91
- 已通过
- 13
- 通过率
- 14%
- 被复制
- 1
- 上传者