我用的是并查集来ac的。
这个和以前的题目有所不同
抽象来说 这属于有向图
所以不能有路径优化那一步 因为那一步是看作无向图来操作的
另外这道题要注意 是 多组输入
题目链接————》》 hdu 1181
AC代码:
#include<iostream> #include<cstdio> using namespace std; int f[30]; int find(int index){ int k = index; while (f[k] != k){ k = f[k]; } int m = index,temp; /*while (f[m] != k){ temp = f[m]; f[m] = k; m = temp; }*/ return k; } void join(int a,int b){ int ina, inb; ina = find(a); inb = find(b); if (ina != inb){ f[ina] = inb; } } int judge(){ // int mark = 0; int k = 'b' - 96, m = 'm' - 96;; while (f[k] != m && f[k]!=k){ k = f[k]; } if (f[k] != m){ return 0; } return 1; } int main(){ // freopen("TestDate.txt", "r", stdin); char s[1000]; int i; while (true){ for (i = 0; i < 30; i++){ f[i] = i; } int mark = -1; while (cin >> s){ if (s[0] == '0'){ mark = 1; break; } for (i = 1; s[i] != '\0'; i++); join(s[0] - 96, s[i-1] - 96); } if (mark != 1){ break; } if (judge()){ cout << "Yes." << endl; } else{ cout << "No." << endl; } } return 0; }