#include #include #include #include #include #include #include #include #include #include #include #include #include #include #pragma warning(disable:4996) typedef long long ll; #define MIN(a, b) ((a)>(b)? (b): (a)) #define MAX(a, b) ((a)<(b)? (b): (a)) #define LINF 9223300000000000000 #define INF 2140000000 const long long MOD = 1000000007; //const long long MOD = 998244353; using namespace std; vector > > g; // to, directed edge vector vis,fin; bool dfs(int paredge, int curr) { assert(vis[curr]==0); vis[curr]=1; int i; for(i=0; i<(int)g[curr].size(); i++) { int next=g[curr][i].first; int edge=g[curr][i].second; if(paredge==edge) continue; if(vis[next] && !fin[next]) return true; if(vis[next]) continue; if (dfs(edge, next)) { return true; } } fin[curr]=1; return false; } void solve(int n, int m, const vector& a, const vector& b, const vector c) { g.clear(); g.resize(n); int i; for(i=0; i a(m),b(m),c(m); int i; for(i=0; i