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 }

 

你可能感兴趣的:(HDU)