点击展开代码块
#include <bits/stdc++.h>
#define mkp make_pair
#define pb push_back
#define all(x) x.bg,x.ed
#define newline puts("")
#define rep(i,n) for(int i=1;i<=n;++i)
#define rrep(i,n) for(int i=0;i<n;++i)
using namespace std;
typedef long long ll;
typedef pair<ll,ll> pii;
const int maxn = 1e5+10;
const int inf = 0x7f7f7f7f;
const int Mod = 1e9+7;
const double eps = 1e-7;
int head[maxn],cnt=0;
struct edge{
int u,v,pre,next;
}e[maxn<<1];
//加边
void add(int u,int v){
e[++cnt].v=v;e[cnt].u=u;e[head[u]].pre=cnt;
e[cnt].next=head[u];head[u]=cnt;
}
//删边
void del(int id){//边的编号
if(e[id].pre){
e[e[id].pre].next=e[id].next;//类似于链表的删点
e[e[id].next].pre=e[id].pre;
}
else{
head[e[id].u]=e[id].next;
e[e[id].next].pre=0;
}
}
int n,m;
struct node{
int x,y;
}p[10010];
int main(){
cnt=0;
cin>>n>>m;
for (int i=0;i<m;i++){
int u,v;
scanf("%d%d",&u,&v);
add(u,v);
}
cout<<"cnt = "<<cnt<<endl;
for (int u=1;u<=n;u++){
printf("%d->",u);
for (int i=head[u];i;i=e[i].next){
printf("%d ",e[i].v);
}
newline;
}
del(3);//cnt边的数量不会变化,链式前向星变化,删除第三条边
// del(1);
// del(2);
newline;
cout<<"cnt = "<<cnt<<endl;
for (int u=1;u<=n;u++){
printf("%d->",u);
for (int i=head[u];i;i=e[i].next){
printf("%d ",e[i].v);
}
newline;
}
return 0;
}