T1.桥梁(bridges/restriction)
Subtask1:暴力,$O(n^2)$。
1 #include<cstdio> 2 #include<algorithm> 3 #define rep(i,l,r) for (int i=(l); i<=(r); i++) 4 #define For(i,x) for (int i=h[x],k; i; i=nxt[i]) 5 using namespace std; 6 7 const int N=100010; 8 int n,m,u,v,d,cnt,T,op,x,y,q[N],vis[N],e[N],h[N],to[N<<1],nxt[N<<1],val[N<<1]; 9 10 void add(int u,int v,int w){ to[++cnt]=v; nxt[cnt]=h[u]; val[cnt]=w; h[u]=cnt; } 11 12 int bfs(int S,int w){ 13 rep(i,1,n) vis[i]=0; 14 q[1]=S; vis[S]=1; int st=0,ed=1; 15 while (st!=ed){ 16 int x=q[++st]; 17 For(i,x) if (e[val[i]]>=w && !vis[k=to[i]]) vis[k]=1,q[++ed]=k; 18 } 19 return ed; 20 } 21 22 int main(){ 23 freopen("restriction.in","r",stdin); 24 freopen("restriction.out","w",stdout); 25 scanf("%d%d",&n,&m); 26 rep(i,1,m) scanf("%d%d%d",&u,&v,&d),e[i]=d,add(u,v,i),add(v,u,i); 27 for (scanf("%d",&T); T--; ){ 28 scanf("%d%d%d",&op,&x,&y); 29 if (op==1) e[x]=y; else printf("%d\n",bfs(x,y)); 30 } 31 return 0; 32 }