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