티스토리 뷰
https://www.acmicpc.net/problem/1507
이미 최단 거리가 주어졌기 때문에 다시 최단 거리를 계산할 때 갱신이 발생한다면 모순이므로 -1을 출력한다. i->j 거리와 i->k->j 거리가 같다면 i->j 간선은 필요가 없으므로 제외시켜준다.
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 31 32 | #include <cstdio> int n,d[20][20],c[20][20],ans; int main() { scanf("%d",&n); for(int i=0;i<n;i++) for(int j=0;j<n;j++) scanf("%d",&d[i][j]); for(int k=0;k<n;k++) { for(int i=0;i<n;i++) { if(i==k) continue; for(int j=0;j<n;j++) { if(j==k || j==i) continue; if(d[i][j]>d[i][k]+d[k][j]) { printf("-1"); return 0; } if(d[i][j]==d[i][k]+d[k][j]) c[i][j]=true; } } } for(int i=0;i<n;i++) for(int j=0;j<n;j++) if(!c[i][j]) ans+=d[i][j]; printf("%d",ans/2); return 0; } | cs |
'Algorithm > BOJ' 카테고리의 다른 글
3671 산업 스파이의 편지 (0) | 2018.02.08 |
---|---|
1956 운동 (0) | 2018.02.06 |
2357 최소값과 최대값 (0) | 2018.02.06 |
11780 플로이드 2 (0) | 2018.02.06 |
1197 최소 스패닝 트리 (0) | 2018.02.06 |