최단 회로 Codeforces Round #103(Div. 2) D. Missile Silos
9016 단어 codeforces
제목 전송문
1 /* 2 : , ; , , u,v , /2 3 u,v , l 4 , :( 5 */ 6 #include <cstdio> 7 #include <algorithm> 8 #include <cstring> 9 #include <cmath> 10 #include <vector> 11 #include <queue> 12 using namespace std; 13 14 const int MAXN = 1e5 + 10; 15 const int INF = 0x3f3f3f3f; 16 int d[MAXN]; 17 int cnt[MAXN]; 18 bool vis[MAXN]; 19 vector<pair<int, int> > G[MAXN]; 20 int n, m, s, l, ans, ans2; 21 22 void SPFA(void) { 23 memset (vis, false, sizeof (vis)); 24 memset (d, INF, sizeof (d)); d[s] = 0; 25 queue<int> Q; Q.push (s); 26 while (!Q.empty ()) { 27 int u = Q.front (); Q.pop (); 28 vis[u] = false; 29 for (int i=0; i<G[u].size (); ++i) { 30 int v = G[u][i].first; int w = G[u][i].second; 31 if (d[v] > d[u] + w) { 32 d[v] = d[u] + w; 33 if (!vis[v]) { 34 vis[v] = true; Q.push (v); 35 } 36 } 37 } 38 } 39 } 40 41 int main(void) { //Codeforces Round #103 (Div. 2) D. Missile Silos 42 //freopen ("spfa.in", "r", stdin); 43 44 while (scanf ("%d%d%d", &n, &m, &s) == 3) { 45 for (int i=1; i<=m; ++i) { 46 int u, v, w; scanf ("%d%d%d", &u, &v, &w); 47 G[u].push_back (make_pair (v, w)); G[v].push_back (make_pair (u, w)); 48 } 49 scanf ("%d", &l); SPFA (); 50 51 ans = ans2 = 0; 52 for (int i=1; i<=n; ++i) { 53 for (int j=0; j<G[i].size (); ++j) { 54 int u = i, v = G[i][j].first, w = G[i][j].second; 55 if (d[u] < l && l - d[u] < w) { 56 if (w - (l-d[u]) + d[v] > l) ans++; 57 else if (d[u] + d[v] + w == 2 * l) ans2++; 58 } 59 } 60 if (d[i] == l) ans++; 61 } 62 printf ("%d
", ans + ans2 / 2); 63 } 64 65 return 0; 66 }
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Codeforces Round #715 Div. 2C The Sports Festival: 구간 DP전형구간 DP의 초전형. 이하, 0-indexed. 입력을 정렬하여 어디서나 시작하고 최적으로 좌우로 계속 유지하면 좋다는 것을 알 수 있습니다. {2000})$의 주문이 된다. 우선, 입력을 소트하여 n개의 요소를 $...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.