记录编号 452909 评测结果 AAAAAAAAAA
题目名称 [USACO Mar07] 奶牛交通 最终得分 100
用户昵称 GravatarCSU_Turkey 是否通过 通过
代码语言 C++ 运行时间 0.007 s
提交时间 2017-09-20 16:53:06 内存使用 1.57 MiB
显示代码纯文本
  1. #include<bits/stdc++.h>
  2. #define v e[i].to
  3. using namespace std;
  4. int n,m,fi[5005],tot,f1[5005],f2[5005],in[5005],out[5005],tot2,head[5005];
  5. struct edge{
  6. int to,next,from;
  7. }e[50005],E[50005];
  8. void edge_add(int x,int y){
  9. e[++tot].to=y;
  10. e[tot].from=x;
  11. e[tot].next=fi[x];
  12. fi[x]=tot;
  13. }
  14. void Edge_add(int x,int y){
  15. E[++tot2].to=y;
  16. E[tot2].next=head[x];
  17. head[x]=tot2;
  18. }
  19. int main()
  20. {
  21. freopen("cowtraffic.in","r",stdin);
  22. freopen("cowtraffic.out","w",stdout);
  23. // freopen("1.txt","r",stdin);
  24. scanf("%d%d",&n,&m);
  25. for(int i=1;i<=m;i++){
  26. int a,b;
  27. scanf("%d%d",&a,&b);
  28. edge_add(a,b);
  29. Edge_add(b,a);
  30. in[b]++;out[a]++;
  31. }
  32. queue<int>S;
  33. for(int i=1;i<=n;i++)if(!in[i])S.push(i),f1[i]=1;
  34. while(!S.empty()){
  35. int u=S.front();
  36. S.pop();
  37. for(int i=fi[u];i;i=e[i].next){
  38. f1[v]+=f1[u];
  39. in[v]--;
  40. if(!in[v])S.push(v);
  41. }
  42. }
  43. for(int i=1;i<=n;i++)if(!out[i])S.push(i),f2[i]=1;
  44. while(!S.empty()){
  45. int u=S.front();
  46. S.pop();
  47. for(int i=head[u];i;i=E[i].next){
  48. f2[E[i].to]+=f2[u];
  49. out[E[i].to]--;
  50. if(!out[E[i].to])S.push(E[i].to);
  51. }
  52. }
  53. int ma=-1;
  54. for(int i=1;i<=m;i++){
  55. ma=max(ma,f1[e[i].from]*f2[e[i].to]);
  56. }
  57. cout<<ma;
  58. return 0;
  59. }