Submission #9424

#TimeUsernameProblemLanguageResultExecution timeMemory
9424dominyellowYour life (kriii2_Y)C++98
0 / 4
0 ms1252 KiB
#include <stdio.h> #include <map> #include <queue> #include <set> #include <vector> using namespace std; int p; int minn; int situ_count, goal_num; queue<int> que; map<int, bool> is_visited_map; vector<vector<int> > graph; vector<int> dist_vec; int shortest_count; void dijkstra(){ int i, j; for(i=1; i<=situ_count; i++){ minn = 987654321; for(j=1; j<=situ_count; j++){ if(is_visited_map.count(j) == 0 && dist_vec[j] < 987654321){ minn = dist_vec[j]; p = j; } } is_visited_map[p] = true; for(j=1; j<=situ_count; j++){ if(graph[p][j] == 1){ if(is_visited_map.count(j) == 0 && dist_vec[j] > dist_vec[p] + 1){ dist_vec[j] = dist_vec[p] + 1; } } } } return; } bool bfs_shortest(){ int pos = que.front(); que.pop(); is_visited_map[pos] = true; int ret=false; if(pos == goal_num){ return true; } int i; bool tmp_chk = false; for(i=1; i<=goal_num; i++){ if(graph[pos][i] == 1 && is_visited_map.count(i) == 0){ que.push(i); if(dist_vec[pos] + 1 < dist_vec[i]){ dist_vec[i] = dist_vec[pos] + 1; } tmp_chk = true; shortest_count += 1; } } if(que.empty()){ return false; } ret |= bfs_shortest(); return ret; } int main(void){ scanf("%d%d", &goal_num, &situ_count); graph.resize(goal_num+1); for(int i=0; i<=goal_num; i++){ graph[i].resize(goal_num+1, 0); } dist_vec.resize(goal_num+1, 987654321); int tmpa, tmpb; for(int i=0; i<situ_count; i++){ scanf("%d%d", &tmpa, &tmpb); graph[tmpa][tmpb] = 1; } shortest_count = 0; que.push(1); dist_vec[1] = 0; if(!bfs_shortest()){ printf("-1\n"); } else{ dijkstra(); printf("%d\n", dist_vec[goal_num]); } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...