Submission #50980

#TimeUsernameProblemLanguageResultExecution timeMemory
50980SpaimaCarpatilorWall (CEOI14_wall)C++17
30 / 100
2074 ms254016 KiB
#include<bits/stdc++.h> using namespace std; int nodes, nr, N, M, ver[409][409], hor[409][409], verC[409][409], horC[409][409], city[409][409], code[42][42][1030]; pair < int, int > cell[409 * 409]; vector < pair < int, int > > v[1700009]; long long dist[2000009]; void addEdge (int x, int y, int z) { v[x].push_back ({y, z}); v[y].push_back ({x, z}); } priority_queue < pair < long long, int > > PQ; long long dijkstra (int source, int destination) { for (int i=1; i<=nodes; i++) dist[i] = 1LL << 60; dist[source] = 0, PQ.push ({0, source}); while (!PQ.empty ()) { auto curr = PQ.top (); PQ.pop (); if (dist[curr.second] != -curr.first) continue; int nod = curr.second; for (auto it : v[nod]) if (dist[it.first] > dist[nod] + it.second) dist[it.first] = dist[nod] + it.second, PQ.push ({-dist[it.first], it.first}); } return dist[destination]; } int main () { //freopen ("input", "r", stdin); //freopen ("output", "w", stdout); scanf ("%d %d", &N, &M); for (int i=1; i<=N; i++) for (int j=1; j<=M; j++) { scanf ("%d", &city[i][j]); if (city[i][j]) cell[nr ++] = {i, j}; } for (int i=1; i<=N; i++) for (int j=0; j<=M; j++) { scanf ("%d", &verC[i - 1][j]); for (int k=0; k<nr; k++) if (cell[k].first == i && cell[k].second <= j) ver[i - 1][j] |= 1 << k; } for (int i=0; i<=N; i++) for (int j=0; j<M; j++) scanf ("%d", &horC[i][j]); for (int i=0; i<=N; i++) for (int j=0; j<=M; j++) for (int k=0; k<(1 << nr); k++) code[i][j][k] = ++nodes; for (int i=0; i<=N; i++) for (int j=0; j<=M; j++) { if (i < N) { for (int k=0; k<(1 << nr); k++) addEdge (code[i][j][k], code[i + 1][j][k ^ ver[i][j]], verC[i][j]); } if (j < M) { for (int k=0; k<(1 << nr); k++) addEdge (code[i][j][k], code[i][j + 1][k], horC[i][j]); } } printf ("%lld\n", dijkstra (code[0][0][0], code[0][0][(1 << nr) - 1])); return 0; }

Compilation message (stderr)

wall.cpp: In function 'int main()':
wall.cpp:40:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
 scanf ("%d %d", &N, &M);
 ~~~~~~^~~~~~~~~~~~~~~~~
wall.cpp:44:15: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf ("%d", &city[i][j]);
         ~~~~~~^~~~~~~~~~~~~~~~~~~
wall.cpp:51:15: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf ("%d", &verC[i - 1][j]);
         ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
wall.cpp:58:15: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf ("%d", &horC[i][j]);
         ~~~~~~^~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...