int_max1's blog

By int_max1, 9 years ago, In English

I can not find a reason as to why I am getting a SIGABRT error in this code. The constraints are n,m<=100. Can someone please help?

Lucius Dungeon http://www.spoj.com/problems/BYTESE1/


#include <bits/stdc++.h> using namespace std; #define pb push_back typedef pair<int,int> ii; vector<ii> graph[10005]; int C[105][105]; int D[10005]; int n,m; set<ii> S; void dijkstra(int st) { S.insert(ii(C[0][0],st)); ii top; int u,v,c,i; D[st]=C[0][0]; while(!S.empty()) { top = *S.begin(); S.erase(S.begin()); c = top.f; u = top.s; for(i=0;i<graph[u].size();i++) { ii x = graph[u][i]; v = x.f; if(D[v]>=D[u]+x.s) { if(D[v]!=1e7) S.erase(S.find(ii(D[v],v))); D[v]=D[u]+x.s; S.insert(ii(D[v],v)); } } } } int main(int argc, const char * argv[]) { ios_base::sync_with_stdio(false); cin.tie(NULL); int i,j,t,u,k,l,a,b,T,d; cin>>t; while(t--) { cin>>n>>m; for(i=0;i<n;i++) for(j=0;j<m;j++) cin>>C[i][j]; cin>>a>>b>>T; a--; b--; for(i=0;i<m*n+1;i++) { graph[i].clear(); D[i]=1e7; } for(i=0;i<n;i++) { for(j=0;j<m;j++) { u = i*m + j; for(k=max(i-1,0);k<=min(i+1,n-1);k++) { if(k==i) continue; graph[u].pb(ii(k*m+j,C[k][j])); } for(l=max(j-1,0);l<=min(j+1,m-1);l++) { if(l==j) continue; graph[u].pb(ii(i*m+l,C[i][l])); } } } dijkstra(0); d = D[a*m + b]; if(d<=T) { cout<<"YES\n"; cout<<T-d<<"\n"; } else cout<<"NO\n"; } return 0; }
  • Vote: I like it
  • -8
  • Vote: I do not like it