第一行输入 n 和 m,表示 n 个点,m 条边
接下来 m 行,每行 u 和 v ,表示 u 和 v 之间有一条边。
n,m≤104
代码
#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
int n,m;
vector<int> vec[1010];
bool vis[1010];
bool dfs(int now,int e){
if(now==e) return true;
else{
if(vec[now].size()==0) return false;
for(vector<int>::iterator it=vec[now].begin();it<vec[now].end();it++){
if(vis[*it]) continue;
vis[*it]=1;
if(dfs(*it,e)) {vis[*it]=0; return true;}
vis[*it]=0;
}
}
return false;
}
int main(){
ios::sync_with_stdio(false);
cin.tie();
cin>>n>>m;
for(int i = 1; i<=n; i++) vec[i].clear();
for(int i = 1; i<=m; i++){
int u,v;
cin>>u>>v;
vec[u].push_back(v);
vec[v].push_back(u);
}
for(int i = 1; i<=n; i++){
if(!dfs(1,i)){
cout<<"NO\n";
return 0;
}
}
cout<<"YES\n";
return 0;
}
代码大概率是错的,求hack