刚学OI,新人求教

P1710 地铁涨价

```cpp #include<bits/stdc++.h> #define R register int #define gc getchar using namespace std; int n,m,Q,u[1000005],v[1000005],ans[1000005],Ans; int edge_num,head[1000005]; int dis[1000005],vis[1000005],d[1000005],del[1000005]; int judge[10000007],tmp; struct Edge{ int to,next; }edge[4000020]; void add(int u,int v) { edge[++edge_num].next=head[u]; edge[edge_num].to=v; head[u]=edge_num; edge[++edge_num].next=head[v]; edge[edge_num].to=u; head[v]=edge_num; /* edge[edge_num].to=v,edge[edge_num].next=head[u]; head[u]=edge_num++; edge[edge_num].to=u,edge[edge_num].next=head[v]; head[v]=edge_num++;*/ } /**/ void dijkstra() { memset(dis,0x3f3f3f3f,sizeof(dis)); memset(vis,0,sizeof(vis)); dis[1]=0; priority_queue<pair<int,int> >q; q.push(make_pair(1,0)); while(q.size()) { int x=q.top().first;q.pop(); if(vis[x])continue; vis[x]=1; for(R i=head[x];i;i=edge[i].next) { int y=edge[i].to; if(dis[y]>dis[x]+1) { dis[y]=dis[x]+1; q.push(make_pair(y,-dis[y])); } } } } void dijkstra2() { memset(d,0x3f3f3f3f,sizeof(d)); memset(vis,0,sizeof(vis)); d[1]=0; priority_queue<pair<int,int> >q; q.push(make_pair(1,0)); while(q.size()) { int x=q.top().first;q.pop(); if(vis[x])continue; vis[x]=1; for(R i=head[x];i;i=edge[i].next) { int y=edge[i].to; if(d[y]>d[x]+1) { d[y]=d[x]+1; q.push(make_pair(y,-d[y])); } } } } /**/ /**/ void dfs(int x,int ff) { for(R i=head[x];i;i=edge[i].next) { int y=edge[i].to; if(y!=ff&&dis[y]!=d[y]&&dis[y]==d[x]+1) { d[y]=d[x]+1; tmp++; dfs(y,x); } } } /**/ /**/ inline int rd() { int ans=0; char ch=gc(); while(ch>'9'||ch<'0')ch=gc(); while(ch>='0'&&ch<='9')ans=ans*10+ch-48,ch=gc(); return ans; } /**/ int main() { n=rd(),m=rd(),Q=rd(); for(R i=1;i<=m;i++) { u[i]=rd(),v[i]=rd(); add(u[i],v[i]); } dijkstra(); memset(head,0,sizeof(head)); memset(vis,0,sizeof(vis)); edge_num=0; for(R i=1;i<=Q;i++) { del[i]=rd(); judge[del[i]]=1; } for(R i=1;i<=m;i++) { if(!judge[i]) { add(u[i],v[i]); } } dijkstra2(); for(R i=Q;i>=1;i--) { tmp=0; R num=del[i],U=u[num],V=v[num]; if(d[U]==dis[U]&&d[U]+1==dis[V]&&d[V]!=dis[V]) { tmp++,d[V]=dis[V],dfs(V,U); } swap(U,V); if(d[U]==dis[U]&&d[U]+1==dis[V]&&d[V]!=dis[V]) { tmp++,d[V]=dis[V],dfs(V,U); } add(U,V); ans[i]=tmp; } for(R i=1;i<=Q;i++) { ans[i]+=ans[i-1]; cout<<ans[i]<<endl; } return 0; } ```
by zyzzyzzyzzyz @ 2018-10-25 22:15:49


fAke
by Zerosking @ 2018-10-25 22:16:46


%%%大佬
by Zerosking @ 2018-10-25 22:17:07


@[Itst](/space/show?uid=96296) @[宇智波—鼬](/space/show?uid=93043) @风骨傲天 @[薄荷凉了夏](/space/show?uid=93733) @[Leo______](/space/show?uid=91933) @[EMT__Mashiro](/space/show?uid=89875)
by zyzzyzzyzzyz @ 2018-10-25 22:18:35


@[风骨傲天](/space/show?uid=138133)
by zyzzyzzyzzyz @ 2018-10-25 22:18:51


fAKe
by _FILARET_ @ 2018-10-25 22:19:49


emmmm,小风骨跟你JIO哦,小风骨不会呢QAQ@[zyzzyzzyzzyz](/space/show?uid=44182)
by Abnormal_Sir @ 2018-10-25 22:20:19


智障:同上QwQ
by 文武武智障 @ 2018-10-25 22:20:58


ans开小了
by 谁是鸽王 @ 2018-10-25 22:37:23


~~这个题不适合新人做,还是去做P1001,P1000,P1008去吧~~
by 反比例函数 @ 2018-10-25 22:37:37


| 下一页