栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

zoj 3830 Alkanes

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

zoj 3830 Alkanes

#include<stdio.h>#include <iostream>#include<cmath>#include<cstring>#include<algorithm>#include <string>#include<queue>#include<vector>template <class T>inline bool rd(T &ret) {char c; int sgn;if (c = getchar(), c == EOF) return 0;while (c != '-' && (c<'0' || c>'9')) c = getchar();sgn = (c == '-') ? -1 : 1;ret = (c == '-') ? 0 : (c - '0');while (c = getchar(), c >= '0'&&c <= '9') ret = ret * 10 + (c - '0');ret *= sgn;return 1;}template <class T>inline void pt(T x) {if (x <0) {putchar('-');x = -x;}if (x>9) pt(x / 10);putchar(x % 10 + '0');}const int N = 50;using namespace std;string name[N] = { "ewrt", "meth", "eth", "prop", "but", "pent", "hex", "hept", "oct", "non", "dec", "undec", "dodec", "tridec", "tetradec", "pentadec" };vector<int>G[N];struct hehe{int dis[N], pre[N], id, sum;vector<int>D[N];int dfs(int u, int fa){int siz = 1;for (int i = 0; i < G[u].size(); i++){int v = G[u][i];if (v != fa)siz += dfs(v, u);}return siz;}int bfs(int s, int t){memset(dis, -1, sizeof dis);memset(pre, -1, sizeof pre);dis[s] = 1;queue<int>q; q.push(s);while (!q.empty()){int u = q.front(); q.pop();for (int i = 0; i < G[u].size(); i++){int v = G[u][i];if (dis[v] != -1)continue;dis[v] = dis[u] + 1;pre[v] = u;q.push(v);}}int last = -1, val = 0;while (t != -1){for (int i = 0; i < G[t].size(); i++){int v = G[t][i];if (v != last && v != pre[t]){if (id == -1 || id > dis[t]) id = dis[t];sum += dis[t];D[dfs(v, t)].push_back(dis[t]);}}last = t;t = pre[t];}}int T;void work(int s, int t){T = t;id = -1;sum = 0;for (int i = 0; i < N; i++)D[i].clear();bfs(s, t);for (int i = 0; i < N; i++)sort(D[i].begin(), D[i].end());}int big(int x, int y){        if(D[x].size()!=D[y].size())return D[x].size()<D[y].size();        return x<y;}void put(){int f = 0;bool vis[N]; memset(vis,0,sizeof vis);for (int i , tim = 1; tim < N; tim++) { int pos = -1; for(int j = 1; j < N; j++)     if(vis[j]==0 && D[j].size() && (pos == -1 || big(j,pos)))         pos = j; if(pos == -1)break; vis[pos] = 1; i = pos; if (f++)       putchar('-'); for (int j = 0; j < D[i].size(); j++) {     if (j)printf(",");     printf("%d", D[i][j]); } putchar('-'); if (2 == (int)D[i].size())     printf("di"); else if (3 == (int)D[i].size())     printf("tri"); else if (4 == (int)D[i].size())     printf("tetra"); else if ((int)D[i].size() > 4){     cout << name[D[i].size()];     printf("a"); } cout << name[i]; printf("yl");        }cout << name[dis[T]];puts("ane");}}b[2];int dis[N], pre[N];int bfs(int s, int t){memset(dis, -1, sizeof dis);memset(pre, -1, sizeof pre);dis[s] = 0;queue<int>q; q.push(s);while (!q.empty()){int u = q.front(); q.pop();for (int i = 0; i < G[u].size(); i++){int v = G[u][i];if (dis[v] != -1)continue;dis[v] = dis[u] + 1;pre[v] = u;q.push(v);}}int last = -1, val = 0;while (t != -1){for (int i = 0; i < G[t].size(); i++){int v = G[t][i];if (v != last && v != pre[t])val++;}last = t;t = pre[t];}return val;}int n, m, len, a[2], siz;void find_total(){len = siz = 0;for (int i = 1; i <= n; i++)for (int j = i + 1; j <= n; j++){int tmp = bfs(i, j);if (dis[j] > len || (dis[j] == len && tmp > siz)){len = dis[j]; a[0] = i; a[1] = j;siz = tmp;}}}void input(){for (int i = 0; i < N; i++)G[i].clear();int u, v;while (m--){scanf("%d %d", &u, &v);G[u].push_back(v);G[v].push_back(u);}}int main() {while (~scanf("%d %d", &n, &m)){input();find_total();b[0].work(a[0], a[1]);b[1].work(a[1], a[0]);if (b[0].id<b[1].id)b[0].put();else if (b[0].id>b[1].id)b[1].put();else{if (b[0].sum < b[1].sum)b[0].put();else if(b[0].sum > b[1].sum)b[1].put(); else {     int id = -1;     for(int i = N-1; id==-1 && i >= 0; i--)     {         if(b[0].D[i].size()>b[1].D[i].size())  id = 0;         else if(b[0].D[i].size()<b[1].D[i].size())  id = 1;         else         {  for(int j = 0; j < b[0].D[i].size(); j++)      if(b[0].D[i][j]<b[1].D[i][j])          id = 0;      else if(b[0].D[i][j]>b[1].D[i][j])          id = 1;         }     }     if(id==-1)id=0;     b[id].put(); }}}return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/368725.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号