题解:P10938
__mt19937__ · · 题解
题目大意
给你一个 DAG,让你求出一个最大的
解题思路
看到
Code
#include<bits/stdc++.h>
#define rep(i,j,k) for(int i=(j);i<=(k);++i)
#define dwn(i,j,k) for(int i=(j);i>=(k);--i)
using namespace std;
const int N=201;
mt19937 rnd(13365312749183220);
int n,m,d[N][N],a[N];
int g(){
int f[N];
int s=0;
rep(i,1,n){
bool ca=1;
rep(j,1,s)if(d[a[f[j]]][a[i]]||d[a[i]][a[f[j]]]){ca=0;break;}
if(ca)f[++s]=i;
}
return s;
}
int f(){
int ms=0;
rep(i,1,5000){
shuffle(a+1,a+n+1,rnd);
int cs=g();
if(cs>ms)ms=cs;
}
return ms;
}
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>n>>m;
rep(i,1,m){
int u,v;
cin>>u>>v;
d[u][v]=1;
}
rep(k,1,n)rep(i,1,n)rep(j,1,n)d[i][j]|=d[i][k]&&d[k][j];
rep(i,1,n)a[i]=i;
cout<<f();
return 0;
}