fork(1) download
  1. #include<stdio.h>
  2. #include<malloc.h>
  3. #include<string.h>
  4. #include<vector>
  5. #include<queue>
  6. #define Mod 1000000007
  7. using namespace std;
  8.  
  9. int *visited = (int*)malloc(100005*sizeof(int));
  10.  
  11. queue<int> q;
  12. vector< vector<int> > adj;
  13. vector<int>::iterator it;
  14.  
  15. inline int BFS(int node, int visited[])
  16. {
  17. int count = 0;
  18. q = queue<int>();
  19. visited[node] = 1;
  20. q.push(node);
  21. count++;
  22. while(!q.empty())
  23. {
  24. count++;
  25. node = q.front();
  26. q.pop();
  27. for(it=adj[node].begin(); it!=adj[node].end(); it++)
  28. {
  29. if(!visited[*it])
  30. {
  31. visited[*it] = 1;
  32. q.push(*it);
  33. }
  34. }
  35. }
  36. return count;
  37. }
  38.  
  39.  
  40. int main()
  41. {
  42. int t,n,m,a,b,Routes,PeopleInRoute;
  43. long long int SelectionWays;
  44. scanf("%d",&t);
  45.  
  46. while(t--)
  47. {
  48. adj.clear();
  49. Routes=0; SelectionWays=1;
  50. memset(visited,0,sizeof(visited));
  51. scanf("%d%d",&n,&m);
  52. adj.resize(n+1);
  53. for(int i=0; i<m; i++)
  54. {
  55. scanf("%d%d",&a,&b);
  56. adj[a].push_back(b);
  57. adj[b].push_back(a);
  58. }
  59.  
  60. for(int i=0; i<=n; i++)
  61. {
  62. PeopleInRoute=1;
  63. if(!visited[i])
  64. {
  65. PeopleInRoute = BFS(i, visited);
  66. Routes++;
  67. }
  68. SelectionWays = (SelectionWays*PeopleInRoute)%Mod;
  69. }
  70. printf("%d %d\n",Routes,PeopleInRoute);
  71. }
  72. free(visited);
  73. return 0;
  74. }
Success #stdin #stdout 0s 3004KB
stdin
3
4 2
1 2
2 3
5 3
1 2
2 3
1 3
6 3
1 2
3 4
5 6
stdout
3 2
2 2
2 2