[[TableOfContents]] = 오늘의 문제 = * [https://www.acmicpc.net/problem/1238|파티] = 참가자 = * 박인서 * 15이원준 = 코드 = == 15이원준 == {{{ #include using namespace std; int arr[1002][1002], dist[1002], go[1002]; bool sp[1002]; int N, M, X; void dijks(int start){ for(int i = 1; i<= N; i++){ sp[i] = false; dist[i] = -1; if(i == start){ dist[i] = 0; } } int now = start; sp[now] = true; dist[now] = 0; for(int k = 1; k< N; k++ ){ for(int i = 1; i<= N; i++){ if(arr[now][i] == -1 || sp[i] == true){ } else if(dist[i] == -1 || dist[i] > dist[now] + arr[now][i]){ dist[i] = dist[now] + arr[now][i]; //cout<< i << " " << dist[i] << " " << dist[now] << " " << arr[now][i]<< endl; } //cout<< now << " "<< i << " " << dist[i]<< " " << arr[now][i]<< endl; } int min = -1; for(int i = 1; i<= N; i++){ if(sp[i] == false && dist[i] != -1 && (min == -1 || dist[min] > dist[i])) min = i; } now = min; sp[now] = true; } /*for(int i = 1; i<= N; i++){ cout< go[now] + arr[i][now]){ go[i] = go[now] + arr[i][now]; //cout<< i << " " << dist[i] << " " << dist[now] << " " << arr[now][i]<< endl; } //cout<< now << " "<< i << " " << dist[i]<< " " << arr[now][i]<< endl; } int min = -1; for(int i = 1; i<= N; i++){ if(sp[i] == false && go[i] != -1 && (min == -1 || go[min] > go[i])) min = i; } now = min; sp[now] = true; } /*for(int i = 1; i<= N; i++){ cout<> N >> M >> X; for(int i = 1; i<=N; i++){ for(int j = 1; j<= N; j++){ arr[i][j] = -1; } } for(int i = 0; i #define MAX_INT 217483647 using namespace std; int edge[1001][1001], dist[2][1001]; bool visit[2][1001]; int main() { int n, m, s, i, j; //입력 및 초기화 cin >> n >> m >> s; for (i = 0; i> a >> b >> c; edge[a][b] = c; } for (i = 0; i <= n; i++) { visit[0][i] = false, visit[1][i] = false; dist[0][i] = MAX_INT, dist[1][i] = MAX_INT; } //첫번째도 두번째도 시작점에서 dist = 0 dist[0][s] = 0, dist[1][s] = 0; for (i = 0; idist[0][j]) min1 = j; if (visit[1][j] == false && dist[1][min2]>dist[1][j]) min2 = j; } //visit check visit[0][min1] = true; visit[1][min2] = true; //경로 탐색 for (j = 1; j <= n; j++) { //기존 dijkstra와 동일 if (dist[0][j]>dist[0][min1] + edge[min1][j] && edge[min1][j] != 0) dist[0][j] = dist[0][min1] + edge[min1][j]; //반대로 edge를 먼저 생각하고 dist를 생각한다. if (dist[1][j]>edge[j][min2] + dist[1][min2] && edge[j][min2] != 0) dist[1][j] = edge[j][min2] + dist[1][min2]; } } //최댓값 탐색 int res = 0; for (i = 1; i <= n; i++) { if (res