Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- //#define DEBUG
- #ifdef DEBUG
- #define INPUT_FILE "C:\\Users\\Maksim Ignatyev\\CLionProjects\\AaDS\\cats\\taskR\\input.txt"
- #define OUTPUT_FILE "C:\\Users\\Maksim Ignatyev\\CLionProjects\\AaDS\\cats\\taskR\\output.txt"
- #else
- #define INPUT_FILE "input.txt"
- #define OUTPUT_FILE "output.txt"
- #endif
- #define INF 11
- int uv_to_i(int u, int v);
- int graph[499500];
- signed char weights[499500];
- int min_edge[1000];
- int out_edge[1000];
- char visited[1000];
- int main() {
- FILE *input = fopen(INPUT_FILE, "r");
- FILE *output = fopen(OUTPUT_FILE, "w+");
- int n, m;
- fscanf(input, "%d %d", &n, &m);
- for (int i = 0; i < 499500; i++) {
- graph[i] = -1;
- }
- for (int i = 0; i < 1000; i++) {
- min_edge[i] = INF;
- out_edge[i] = -1;
- visited[i] = 0;
- }
- for (int i = 0; i < m; i++) {
- int u, v;
- int w;
- fscanf(input, "%d %d %d", &u, &v, &w);
- graph[uv_to_i(u, v)] = i;
- weights[i] = (signed char) w;
- }
- fclose(input);
- min_edge[0] = 0;
- for (int i = 0; i < n; i++) {
- int v = -1;
- for (int j = 0; j < n; j++) {
- if (visited[j] == 0 && (v == -1 || min_edge[j] < min_edge[v])) {
- v = j;
- }
- }
- visited[v] = 1;
- if(out_edge[v] != -1){
- fprintf(output, "%d\n", graph[uv_to_i(v, out_edge[v])]);
- }
- for (int j = 0; j < n; j++) {
- if(graph[uv_to_i(i, j)] != -1 && weights[graph[uv_to_i(v, j)]] < min_edge[j]){
- min_edge[j] = weights[graph[uv_to_i(v, j)]];
- out_edge[j] = v;
- }
- }
- }
- fclose(output);
- }
- int uv_to_i(int u, int v) {
- if (v < u) {
- return (((u - 1) * u) / 2) + v;
- }
- return (((v - 1) * v) / 2) + u;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement