#include<bits/stdc++.h>
using namespace std;
long long n,m;
vector<vector<long long>>adj;
vector<long long>par;
vector<long long>vaz;
vector<long long>res,resa,we;
vector<bool>vis;
long long mod=1e9+7;
void solvef(long long u){
if(we[u]!=0){
vaz[u]=1;
}
vis[u]=1;
vector<long long>adja;
for(int i=0;i<adj[u].size();i++){
if(vis[adj[u][i]]==0){
adja.push_back(adj[u][i]);
}
}
adj[u]=adja;
long long counta=0;
adja.clear();
for(int i=0;i<adj[u].size();i++){
counta++;
we[adj[u][i]]++;
}
for(int i=0;i<adj[u].size();i++){
if(vis[adj[u][i]]==0){
we[adj[u][i]]--;
counta--;
solvef(adj[u][i]);
adja.push_back(adj[u][i]);
if(we[adj[u][i]]>0){
swap(adja[0],adja.back());
}
}
}
if(counta!=0){
vaz[u]=2;
}
we[u]-=counta;
adj[u]=adja;
}
void solves(long long u){
vis[u]=1;
for(int i=0;i<adj[u].size();i++){
solves(adj[u][i]);
}
if(vaz[u]==1){
for(int i=0;i<adj[u].size();i++){
res[u]*=res[adj[u][i]]+1;
res[u]%=mod;
}
resa[u]=res[u];
return ;
}
if(vaz[u]==0){
for(int i=0;i<adj[u].size();i++){
res[u]*=res[adj[u][i]]+1;
res[u]%=mod;
}
for(int i=0;i<adj[u].size();i++){
if(i==0){
resa[u]*=resa[adj[u][i]];
resa[u]%=mod;
continue;
}
resa[u]*=res[adj[u][i]]+1;
resa[u]%=mod;
}
return ;
}
if(vaz[u]==2){
for(int i=0;i<adj[u].size();i++){
if(i==0){
resa[u]*=resa[adj[u][i]];
resa[u]%=mod;
continue;
}
resa[u]*=res[adj[u][i]]+1;
resa[u]%=mod;
}
res[u]=resa[u];
return ;
}
}
int main(){
cin>>n>>m;
adj.resize(n+1);
par.resize(n+1);
vis.resize(n+1);
vaz.resize(n+1);
res.resize(n+1,1);
resa.resize(n+1,1);
we.resize(n+1);
for(int i=0;i<m;i++){
long long u,v;
cin>>u>>v;
adj[u].push_back(v);
adj[v].push_back(u);
}
solvef(1);
solves(1);
long long mainres=0;
for(int i=1;i<=n;i++){
cout<<i<<" "<<res[i]<<" "<<resa[i]<<" "<<vaz[i]<<endl;
mainres+=res[i];
mainres%=mod;
}
cout<<mainres<<endl;
}
Compilation message
Main.cpp: In function 'void solvef(long long int)':
Main.cpp:16:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
16 | for(int i=0;i<adj[u].size();i++){
| ~^~~~~~~~~~~~~~
Main.cpp:24:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
24 | for(int i=0;i<adj[u].size();i++){
| ~^~~~~~~~~~~~~~
Main.cpp:28:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
28 | for(int i=0;i<adj[u].size();i++){
| ~^~~~~~~~~~~~~~
Main.cpp: In function 'void solves(long long int)':
Main.cpp:48:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
48 | for(int i=0;i<adj[u].size();i++){
| ~^~~~~~~~~~~~~~
Main.cpp:52:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
52 | for(int i=0;i<adj[u].size();i++){
| ~^~~~~~~~~~~~~~
Main.cpp:60:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
60 | for(int i=0;i<adj[u].size();i++){
| ~^~~~~~~~~~~~~~
Main.cpp:64:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
64 | for(int i=0;i<adj[u].size();i++){
| ~^~~~~~~~~~~~~~
Main.cpp:76:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
76 | for(int i=0;i<adj[u].size();i++){
| ~^~~~~~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
1 ms |
212 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
1 ms |
340 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
1 ms |
212 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
1 ms |
212 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |