int main()
{
	int i,j,count;
	while(scanf("%d",&n) != EOF)
	{
		fun();
		Dinic flow;
		for(i=1 ; i <= n ; ++i){
			if(dp[i]==1) flow.insert(0,i,1);
			if(dp[i]==len) flow.insert(i,n+1,1);
			for(j=i+1 ; j <= n ; ++j)
				if(a[j] > a[i])
					flow.insert(i,j,1);
		}
		printf("%d\n%d\n",len,flow.MaxFlow(0,n+1));
	}
	return 0;
}
Esempio n. 2
0
int main(){
	int n,m,a,b,s,t;
	while( scanf("%d%d", &n, &m) != EOF ){
		Dinic mf;
		for(int i=0 ; i < m ; ++i){
			scanf("%d%d", &a, &b);
			mf.insert( a, b, 1 );
		}
		scanf("%d%d", &s, &t);
		printf("%d\n", mf.MaxFlow(s,t));

		CLR( ans, 0 );
		int cnt = 0;
		for(int i=0 ; i < mf.end ; ++i)
			if( net[i].val > 1 )
				if( i%2 == 0 )
					ans[cnt++] = i/2+1;
		printf("%d\n", cnt);
		for(int i=0 ; i < cnt ; ++i)
			printf("%d\n", ans[i]);
	}
	return 0;
}