• HDU2037 BFS


    题意:

    给定一些节目单的时间,求最多能看完整的节目数。

    把这些节目当成点,若下一个节目在上一个节目时间之后 则连上一条有向边 最后枚举起点求最长路。。。。

    View Code
     1 #include<stdio.h>
     2 #include<algorithm>
     3 #include<queue>
     4 using namespace std;
     5 const int maxn = 105;
     6 const int maxm = 10005;
     7 const int inf = 99999999;
     8 struct node{
     9     int s,t;
    10 };
    11 node a[ maxn ];
    12 struct node2{
    13     int u,next;
    14 }edge[ maxm ];
    15 int cnt,head[ maxn ];
    16 
    17 void init(){
    18     cnt=0;
    19     memset( head,-1,sizeof( head ));
    20 }
    21 
    22 void addedge( int a,int b ){
    23     edge[ cnt ].u=b;
    24     edge[ cnt ].next=head[ a ];
    25     head[ a ]=cnt++;
    26 }
    27 
    28 int dis[ maxn ],vis[ maxn ];
    29 int spfa( int s,int n ){
    30     //memset( vis,0,sizeof( vis ));
    31     for( int i=0;i<n;i++ ){
    32         dis[ i ]=1;
    33         vis[ i ]=0;
    34     }
    35     queue<int>q;
    36     q.push( s );
    37     vis[ s ]=1;
    38     dis[ s ]=1;
    39     while( !q.empty() ){
    40         int now=q.front();
    41         q.pop();
    42         vis[ now ]=0;
    43         for( int i=head[ now ];i!=-1;i=edge[ i ].next ){
    44             int nxt=edge[ i ].u;
    45             if( dis[ nxt ]<dis[ now ]+1 ){
    46                 dis[ nxt ]=dis[ now ]+1;
    47                 if( vis[ nxt ]==0 ){
    48                     vis[ nxt ]=1;
    49                     q.push( nxt );
    50                 }
    51             }
    52         }
    53     }
    54     int sum=dis[ s ];
    55     for( int i=0;i<n;i++ )
    56         sum=max( sum,dis[ i ]);
    57     return sum;
    58 }
    59 
    60 int main(){
    61     int n;
    62     while( scanf("%d",&n),n ){
    63         for( int i=0;i<n;i++ ){
    64             scanf("%d%d",&a[ i ].s,&a[ i ].t);
    65         }
    66         init();
    67         for( int i=0;i<n;i++ ){
    68             for( int j=0;j<n;j++ ){
    69                 if( a[ j ].s>=a[ i ].t&&i!=j ){
    70                     addedge( i,j );
    71                 }
    72             }
    73         }
    74         int ans=0;
    75         for( int i=0;i<n;i++ )
    76             ans=max( ans,spfa( i,n ) );
    77         printf("%d\n",ans);
    78     }
    79     return 0;
    80 }
    keep moving...
  • 相关阅读:
    脑洞大开的爬虫解决思路 转载:https://mp.weixin.qq.com/s/Bd-wz_RiRpYv8ufIbQTZDg
    js逆向某东滑块 转载 https://mp.weixin.qq.com/s/eZSTfduYS63-LOvkAofxqA
    不能爬小程序,叫什么会爬虫 【参考资料也要看】 https://mp.weixin.qq.com/s/oDG3k_qjMZaoygZmz9OUDw
    HDU6042 Journey with Knapsack
    HDU7073 Integers Have Friends 2.0
    CF1439C Greedy Shopping
    CF813E Army Creation
    POJ1322 Chocolate
    CF451E Devu and Flowers
    POJ3734 Blocks
  • 原文地址:https://www.cnblogs.com/xxx0624/p/2963543.html
Copyright © 2020-2023  润新知