[关闭]
@994495jj 2017-07-31T11:56:42.000000Z 字数 1269 阅读 782

cfgym100519G

201707


  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define fi first
  4. #define se second
  5. #define mp make_pair
  6. #define pb push_back
  7. #define rep(i, a, b) for(int i=(a); i<(b); i++)
  8. #define sz(x) (int)x.size()
  9. #define de(x) cout<< #x<<" = "<<x<<endl
  10. typedef long long ll;
  11. typedef pair<int, int> pii;
  12. //------
  13. const int N=200005;
  14. bool vis[N],o[N];
  15. int n,tim,p;
  16. int pre[N],deg[N],f[N],sta[N];
  17. map<string,int> id;
  18. void dfs(int u) {
  19. if(vis[u]) return ;
  20. vis[u]=1;
  21. sta[++p]=u;
  22. dfs(pre[u]);
  23. }
  24. int calc(int u) {
  25. if(~f[u]) return f[u];
  26. if(pre[u]==-1) return f[u]=0;
  27. return f[u]=1+calc(pre[u]);
  28. }
  29. int main(){
  30. ios::sync_with_stdio(false);
  31. cin>>n;
  32. memset(pre,-1,sizeof(pre));
  33. memset(f,-1,sizeof(f));
  34. ///read
  35. rep(i,0,n) {
  36. int u,v;
  37. string a,b,c;
  38. cin>>a>>b>>c>>c>>c;
  39. v=id[a+b];
  40. if(v==0) {
  41. id[a+b]=++tim;
  42. v=tim;
  43. }
  44. u=id[a+c];
  45. if(u==0) {
  46. id[a+c]=++tim;
  47. u=tim;
  48. }
  49. pre[v]=u;
  50. ++deg[u];
  51. }
  52. ///solve
  53. vector<int> q;
  54. int ans=0;
  55. rep(i,1,tim+1) {
  56. if(deg[i]==0) {
  57. o[i]=1;
  58. q.pb(i);vis[i]=1;
  59. }
  60. }
  61. rep(i,0,sz(q)) {
  62. int u=q[i],v=pre[u];
  63. if(vis[v]) continue;
  64. --deg[v];
  65. if(deg[v]==0) {
  66. q.pb(v);
  67. vis[v]=1;
  68. }
  69. }
  70. rep(i,1,tim+1) {
  71. if(!vis[i]) {
  72. p=0;
  73. dfs(i);
  74. rep(j,1,p+1) f[sta[j]]=p;
  75. ans=max(ans,p);
  76. }
  77. }
  78. rep(i,1,tim+1) {
  79. if(o[i]) ans=max(calc(i),ans);
  80. }
  81. ///print
  82. cout<<ans<<endl;
  83. return 0;
  84. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注