Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- pwnable
- JS
- pwn
- PS
- blind-sqli
- XSS
- Crypto
- SQLi
- web
- blind_sqli
- Bob
- Pwnable.kr
- 백준
- regex
- 예전글 #PS
- pwn.college
- webhacking.kr
- 예전글 #CNN
- cryptohack.org
- cce2023
- cookie
- SECGAME
- 예전글
- HTB
Archives
- Today
- Total
아모에요
[BOJ/백준] 1956 - 운동 본문
https://www.acmicpc.net/problem/1956
각 정점은 일방향 가중치가 존재하는 간선으로 연결 되어 있으며 이들 사이를 움직이는 가중치의 합이 최소인 사이클을 찾는 알고리즘을 설계해야 한다.
처음에는 각 정점에서 출발하여서 모든 가능한 모든 경로를 재귀함수로 돌게 하는 코드를 짜 보았으나 실패하였다.
이 문제는 플로이드-워셜 알고리즘을 이용해 간단하게 해결할 수 있다.
#include<iostream>
#include<algorithm>
#define M 1<<20
using namespace std;
int v,e[401][401],res=M;
int main()
{
cin.tie(0);
ios_base::sync_with_stdio(NULL);
cin >> v;
int roads;
cin >> roads;
for(int i=1; i<=v; i++){
for(int j=1; j<=v; j++){
e[i][j] = M;
}
}
for(int i=0; i<roads; i++){
int a,b,c;
cin >> a >> b >> c;
e[a][b] = c;
}
for(int k=1; k<=v; k++){
for(int i=1; i<=v; i++){
for(int j=1; j<=v; j++){
if(e[i][k] + e[k][j] < e[i][j]){
e[i][j] = e[i][k] + e[k][j];
}
}
}
}
for(int i=1; i<=v; i++){
for(int j=1; j<=v; j++){
if(i == j) continue;
res = min(res, e[i][j]+e[j][i]);
}
}
res = res==M ? -1 : res;
cout << res;
return 0;
}
[출처] [BOJ/백준] 1956 - 운동|작성자 윤댕
'Study > PS' 카테고리의 다른 글
[BOJ/백준][Rust] 1008 A/B (0) | 2023.06.18 |
---|---|
[BOJ/백준][Rust] 1001 A-B (0) | 2023.06.18 |
[BOJ/백준][Rust] 1000 A+B (0) | 2023.06.18 |