求助!!!

P2845 [USACO15DEC] Switching on the Lights S

本人A了三个,只有800KB 看题解大佬全是2000多KB 蒟蒻我有点懵逼 附上我的评测记录 [](https://www.luogu.org/record/show?rid=12928479)
by 陌尘缘_怜 @ 2018-11-01 23:48:22


@[陌尘缘_怜](/space/show?uid=67984) 两种可能。 * dfs爆栈需要优化 * 二维vector爆炸
by disangan233 @ 2018-11-02 00:23:34


剪枝然后$10000+$的$vector$会炸![](https://cdn.luogu.com.cn/upload/pic/18711.png)
by Quank123Wip @ 2018-11-02 06:14:31


@[Esport_P1ayErX](/space/show?uid=73552) vector 会炸???
by 陌尘缘_怜 @ 2018-11-02 18:09:12


@[disangan233](/space/show?uid=72679) 谢谢,第一次知道vector会炸
by 陌尘缘_怜 @ 2018-11-02 18:10:21


@[陌尘缘_怜](/space/show?uid=67984) 10000+个vector啊
by Quank123Wip @ 2018-11-03 11:14:06


@[Esport_P1ayErX](/space/show?uid=73552) 可是蒟蒻我的另一题4568飞行路线由于需要分层建图开了100,000的vector却AC了? ```cpp #include<iostream> #include<cstdio> #include<vector> #include<queue> #include<cstring> using namespace std; void Read(int &x); void Write(int x); struct edge{ int ks,ns,nt,kt,l; }; edge e[5000005]; int n,m,k,es,et; vector<int> v[12][10005]; struct node{ int xk,x; int di; bool operator < (const node w) const { return di>w.di; } }; priority_queue<node> q; bool b[12][10005]; int dis[15][10005]; void dij() { memset(b,false,sizeof(b)); memset(dis,0x3f,sizeof(dis)); q.push((node){0,es,0}); dis[0][es]=0; while(!q.empty()) { node w=q.top();//cout<<"*"; q.pop(); if(b[w.xk][w.x]) continue; b[w.xk][w.x]=true; for(int i=0,len=v[w.xk][w.x].size();i<len;i++) { int t=e[v[w.xk][w.x][i]].nt; int tk=e[v[w.xk][w.x][i]].kt; if(dis[tk][t]>dis[w.xk][w.x]+e[v[w.xk][w.x][i]].l) { dis[tk][t]=dis[w.xk][w.x]+e[v[w.xk][w.x][i]].l; q.push((node){tk,t,dis[tk][t]}); } } } Write(dis[k][et]); } int main() { Read(n),Read(m),Read(k);//建k+1层 //点从0 到 n-1 Read(es),Read(et); int ss,tt,ll; int j=0; for(int i=1;i<=m;i++) { Read(ss),Read(tt),Read(ll); for(int kk=0;kk<=k;kk++)//各层建边 { v[kk][ss].push_back(++j),e[j].ns=ss,e[j].nt=tt,e[j].l=ll,e[j].ks=kk,e[j].kt=kk; v[kk][tt].push_back(++j),e[j].ns=tt,e[j].nt=ss,e[j].l=ll,e[j].ks=kk,e[j].kt=kk; } for(int kk=1;kk<=k;kk++)//从kk-1层到kk层建边 { v[kk-1][ss].push_back(++j),e[j].ns=ss,e[j].nt=tt,e[j].l=0,e[j].ks=kk-1,e[j].kt=kk; v[kk-1][tt].push_back(++j),e[j].ns=tt,e[j].nt=ss,e[j].l=0,e[j].ks=kk-1,e[j].kt=kk; } } dij(); return 0; } void Read(int &x) { int i=1; x=0; char c=getchar(); while(c<'0' or c>'9') { if(c=='-') i=-1; c=getchar(); } while(c>='0' and c<='9') { x=x*10+(c-'0'); c=getchar(); } x*=i; } void Write(int x) { if(x<0) { putchar('-'); x=-1*x; } if(x>9) Write(x/10); putchar(x%10+'0'); } ```
by 陌尘缘_怜 @ 2018-11-03 13:45:32


@[Esport_P1ayErX](/space/show?uid=73552) 而且vector不应该是动态数组么,内存是比邻接表小的不是么,除了会慢点不是么??
by 陌尘缘_怜 @ 2018-11-03 13:48:25


|