Altered Structure
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
#include <deque>
|
||||
#include <string>
|
||||
using namespace std;
|
||||
struct Graph{
|
||||
int v;
|
||||
int e;
|
||||
vector<vector<int>> adj;
|
||||
vector<bool> visited;
|
||||
|
||||
Graph(int _v) : v(_v) {
|
||||
adj.resize(v);
|
||||
visited.assign(v, false);
|
||||
}
|
||||
bool validateV(int _v){
|
||||
return ( _v >= 0 && _v < v);
|
||||
}
|
||||
void insert(int _a, int _b){
|
||||
if(!validateV(_a) || !validateV(_b)) return;
|
||||
|
||||
adj[_a].push_back(_b);
|
||||
}
|
||||
int degree(int _v){
|
||||
if(!validateV(_v)) return 0;
|
||||
return outDegree(_v) + inDegree(_v);
|
||||
}
|
||||
int outDegree(int _v){
|
||||
if(!validateV(_v)) return 0;
|
||||
return adj[_v].size();
|
||||
}
|
||||
int inDegree(int _v){
|
||||
if(!validateV(_v)) return 0;
|
||||
int js = 0;
|
||||
for(auto x : adj){
|
||||
for(int i = 0; i < x.size(); i++){
|
||||
if(x[i] == _v) js++;
|
||||
}
|
||||
}
|
||||
return js;
|
||||
}
|
||||
void dfs(int _v){
|
||||
if(!validateV(_v)) return;
|
||||
if(visited[_v]) return;
|
||||
visited[_v] = true;
|
||||
for(auto x : adj[_v]){
|
||||
dfs(x);
|
||||
}
|
||||
}
|
||||
bool isConnected(){
|
||||
dfs(0);
|
||||
for(auto x : visited){
|
||||
if(!x) return false;
|
||||
}
|
||||
|
||||
int js = 0;
|
||||
for(int i = 0; i < v; i++){
|
||||
if(degree(i) % 2 == 1) js++;
|
||||
}
|
||||
return (js == 0) || (js == 2);
|
||||
}
|
||||
};
|
||||
int main(){
|
||||
int n;
|
||||
cin >> n;
|
||||
Graph g(n);
|
||||
vector<string> s;
|
||||
s.resize(n);
|
||||
for(int i = 0; i < n; i++){
|
||||
cin >> s[i];
|
||||
}
|
||||
for(int i = 0; i < n; i++){
|
||||
for(int j = 0; j < n; j++){
|
||||
if(i != j && s[i].back() == s[j].front()) g.insert(i, j);
|
||||
}
|
||||
}
|
||||
g.isConnected() ? cout << "YES" << endl : cout << "NO" << endl;
|
||||
system("pause");
|
||||
return 0;
|
||||
}
|
Reference in New Issue
Block a user