构图技巧
点边互化
有向图中
,
,
, 若点
x
x
x 作为起点
,
,
, 则连有向边
(
x
′
,
y
)
(x',y)
(x′,y)
,
,
, 否则连有向边
(
y
,
x
)
(y,x)
(y,x)
.
.
.
最后使所有点
x
x
x
,
,
, 连边
(
x
,
x
′
)
(x,x')
(x,x′)
.
.
.
无向图中
,
,
, 若有边
(
x
,
y
)
(x,y)
(x,y)
,
,
, 则连有向边
(
x
′
,
y
)
(x',y)
(x′,y) 和有向边边
(
y
′
,
x
)
(y',x)
(y′,x)
.
.
.
最后使所有点
x
x
x
,
,
, 连边
(
x
,
x
′
)
(x,x')
(x,x′)
.
.
.
任何图中 , , , 边 ( x , y ) (x,y) (x,y) 可以变为 ( x , e ) (x,e) (x,e) 和 ( e , y ) (e,y) (e,y) , , , e e e 是新建的节点 , , , 注意新边的方向 . . .
最好自己用手模拟一遍 . . .
数据结构
邻接矩阵
定义矩阵 A r r x , y Arr_{x,y} Arrx,y 表示节点 x x x , , , y y y 之间的信息 . . .
int Cost[MaxN][MaxN];
inline void Work(){
int from;
for(register int to=1;to<=n;to++)
if(Cost[from][to]!=-1)Cost[from][to];
}
inline void Init(){
memset(Cost,-1,sizeof(Cost));
}
注意事项 : : :
- 要判断边是否存在 . . .
- 无向图要同时更新两条边 . . .
- 节点编号最好离散 . . .
- 没有办法保留端点重复的边的意义 . . .
邻接表
int Last[MaxN];
int To[MaxM],Next[MaxM],Cost[MaxN];
inline void Insert(int from,int to,int cost){
To[cnt]=to;Cost[cnt]=cost;
Next[cnt]=Last[from];Last[from]=cnt++;
}
inline void Work(){
int from;
for(register int k=Last[from];k!=-1;k=Next[k])
Cost[k];
}
inline void init(){
cnt=0;memset(Last,-1,sizeof(Last));
}
注意事项 : : :
- 节点编号最好离散 . . .
- 无向图建立需要两条边 , , , 要控制空间 . . .
514



被折叠的 条评论
为什么被折叠?



