Submission #352524
Source Code Expand
#include <iostream> #include <immintrin.h> using namespace std; int N, M; int d[420][420] __attribute__((aligned(32))); int K; int main() { while (cin >> N >> M) { for (int i = 0; i <= 400; i++) { for (int j = 0; j <= 400; j++) { d[i][j] = 1<<28; } d[i][i] = 0; } for (int i = 0; i < M; i++) { int a, b, c; cin >> a >> b >> c; --a; --b; d[a][b] = d[b][a] = c; } // for (int k = 0; k < N; k++) { // for (int i = 0; i < N; i++) { // for (int j = 0; j < N; j++) { // d[i][j] = min(d[i][j], d[i][k] + d[k][j]); // } // } // } for (int k = 0; k < N; k++) { for (int i = 0; i < N; i++) { int j = 0; // ik = {d[i][k], d[i][k], d[i][k], d[i][k]} __m128i ik = _mm_set_epi32(d[i][k], d[i][k], d[i][k], d[i][k]); for (;j<N;j+=4) { // やること // d[i][j] に最小値をセットする // base = {d[i][j], d[i][j+1], d[i][j+2], d[i][j+3]} __m128i base = _mm_load_si128((__m128i*)(d[i] + j)); // fact = {d[k][j], d[k][j+1], d[k][j+2], d[k][j+3]} __m128i fact = _mm_load_si128((__m128i*)(d[k] + j)); fact = _mm_add_epi32(fact, ik); base = _mm_min_epi32(base, fact); d[i][j] = _mm_extract_epi32(base, 0); d[i][j+1] = _mm_extract_epi32(base, 1); d[i][j+2] = _mm_extract_epi32(base, 2); d[i][j+3] = _mm_extract_epi32(base, 3); } for (;j<N;j++) { d[i][j] = min(d[i][j], d[i][k] + d[k][j]); } } } cin >> K; while (K--) { int x, y, z; cin>>x>>y>>z; --x; --y; for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { d[i][j] = min(d[i][j], d[i][x] + z + d[y][j]); d[i][j] = min(d[i][j], d[i][y] + z + d[x][j]); } } long long s = 0; for (int i = 0; i < N; i++) { for (int j = i+1; j < N; j++) { s += d[i][j]; } } cout << s << endl; } } return 0; }
Submission Info
Submission Time | |
---|---|
Task | C - アットコーダー王国の交通事情 |
User | brly |
Language | C++11 (Clang++ 3.4) |
Score | 0 |
Code Size | 2268 Byte |
Status | CE |
Compile Error
./Main.cpp:57:18: error: use of undeclared identifier '_mm_min_epi32'; did you mean '_mm_min_epi16'? base = _mm_min_epi32(base, fact); ^~~~~~~~~~~~~ _mm_min_epi16 /usr/bin/../lib/clang/3.4/include/emmintrin.h:703:1: note: '_mm_min_epi16' declared here _mm_min_epi16(__m128i __a, __m128i __b) ^ ./Main.cpp:58:21: error: use of undeclared identifier '_mm_extract_epi32'; did you mean '_mm_extract_epi16'? d[i][j] = _mm_extract_epi32(base, 0); ^~~~~~~~~~~~~~~~~ _mm_extract_epi16 /usr/bin/../lib/clang/3.4/include/emmintrin.h:1266:1: note: '_mm_extract_epi16' declared here _mm_extract_epi16(__m128i __a, int __imm) ^ ./Main.cpp:59:23: error: use of undeclared identifier '_mm_extract_epi32'; did you mean '_mm_extract_epi16'? d[i][j+1] = _mm_extract_epi32(base, 1); ^~~~~~~~~~~~~~~~~ _mm_extract_epi16 /usr/bin/../lib/clang/3.4/include/emmintrin.h:1266:1: note: '_mm_extract_epi...