structPath { int u, v, id; }; int pre[maxn], nxt[maxn];
voidsolve( ){ int n = read( ), m = read( ); vector<int> ai( n + 1 ), ao( n + 1 );
int tot = 0; for( int i = 1; i <= n; ++ i ) ai[i] = ++ tot; for( int i = 1; i <= n; ++ i ) ao[i] = ++ tot;
int S = ++ tot, T = ++ tot; init( tot );
for( int i = 1; i <= n; ++ i ) { add_edge( S, ai[i], 1 ); // add_edge( ai[i], ao[i], 1 ); 这条是错误的! add_edge( ao[i], T, 1 ); }
vector<Path> paths; for( int i = 1; i <= m; ++ i ) { int u = read( ), v = read( ); paths.push_back({ u, v, (int)edge.size( ) }); add_edge( ai[u], ao[v], 1 ); }