Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define F first
- #define S second
- #define mp make_pair
- #define pb push_back
- #define INF 0x3f3f3f3f
- #define LINF 0x3f3f3f3f3f3f3f3fLL
- using namespace std;
- typedef long long ll;
- typedef vector<int> vi;
- typedef set<int> si;
- typedef pair<int,int> ii;
- typedef vector<ii> vii;
- typedef map<string,int> msi;
- typedef map<int,int> mi;
- int n1,n2,d;
- vi grafo[100010];
- int vis[100010];
- int pd[100010];
- int dfs(int pai){
- if(pd[pai]!= -1) return pd[pai];
- int cont=0;
- for(int i =0;i<grafo[pai].size();i++){
- int filho = grafo[pai][i];
- //if(!vis[filho]){
- int x= dfs(filho);
- if((pai < n1 && filho>=n1) || (filho < n1 && pai>=n1)) x+=1;
- cont = max(x,cont);
- //}
- }
- return pd[pai]=cont;
- }
- int main(){
- while(cin >>n1>>n2>>d && n1){
- for(int i =0;i<n1+n2;i++){
- grafo[i].clear();
- }
- while(d--){
- int x,y;
- cin >>x >>y;
- x--;
- y--;
- grafo[y].pb(x);
- }
- memset(vis,0,sizeof vis);
- int cont1 =0;
- memset(pd,-1,sizeof pd);
- for(int i =0;i<n1;i++){
- if(!vis[i])
- cont1= max(dfs(i),cont1);
- }
- int cont2 =0;
- for(int i =n1;i<n1+n2;i++){
- if(!vis[i])
- cont2 = max(cont2,dfs(i));
- }
- cont1 = min(cont1,cont2)+3;
- //if(cont1 >(n1+n2)/2)cont1--;
- cout <<cont1 <<'\n';
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement