const int MAXV(100005),MAXE(10005);struct edge{ int y,next;}e[MAXE];int head[MAXV],ecnt;void connect(int x,int y){ e[++ecnt].y=y; e[ecnt].next=head[x]; head[x]=ecnt;}for(int i=head[x];i;i=e[i].next){ int y=e[i].y; ....}//head[a] 编号为a的点最终指向的边//e[cnt].next 第cnt条边所连接的上一条边//e[cnt].end 第cnt条边的终点与a相对 //邻接表利用边来遍历 *---------------------------------------------------*#includeusing namespace std; const int maxn=200000;int f[maxn][2],w[maxn],head[maxn];int cnt;bool vis[maxn]; inline int read(){ int num=0,f=1; char c=getchar(); while(!isdigit(c)){ if(c=='-') f=-1; c=getchar(); } while(isdigit(c)){ num=(num+(num<<2)<<1)+(c^48); c=getchar(); } return num*f;} struct node{ int end,next; }e[maxn]; inline void add_edge(int,int);void dfs(int); inline void add_edge(int a,int b){ e[++cnt].end=b; e[cnt].next=head[a]; head[a]=cnt; // cout< <<" "< <