当前位置: 首页 > wzjs >正文

内蒙古建设工程社会保障费退费网站免费网站建站页面

内蒙古建设工程社会保障费退费网站,免费网站建站页面,广州网页设计机,建设银行e路护航官方网站登陆目录 E. Palindromic Shortest Path F. Alkane E. Palindromic Shortest Path 如果正着想,从 i 到 j 有没有回文串路径,太复杂。 换一种思路,目标是找出所有回文路径,同时记录新增回文路径的两端点对应答案。 具体方法是从路径长为…

目录

        E. Palindromic Shortest Path

        F. Alkane


 

 

  

E. Palindromic Shortest Path

        如果正着想,从 i 到 j 有没有回文串路径,太复杂。

        换一种思路,目标是找出所有回文路径,同时记录新增回文路径的两端点对应答案。

        具体方法是从路径长为 0 和 1的所有情况开始扩散,就是 bfs,每次取出一条路径的两个端点 u 和 v,检查有没有一个点 x 到 u 的字符等于 v到一个点 y 的字符,若有并且 x 到 y 还没有答案,则更新 x 到 y的答案。因为路径一定是越来越长,因此第一次更新过的两个点后面不可能再被更新。

        一定要把(i,i)也就是路径长度为 0 的先入队,不能放在循环里入,要确保这些对在队列最前面,也是最先取出。没有了长度为 0 的再开始取长度为 1 的。长度为 0 和 1 的都是预处理进去的。

        

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 105, INF = 1e18;struct node
{int u, v, size;
};int T, n, cnt, ans[N][N], vis[N][N];
char a[N][N];
queue<node> q;signed main()
{cin >> n;for (int i = 1; i <= n; i ++)for (int j = 1; j <= n; j ++)ans[i][j] = -1;for (int i = 1; i <= n; i ++)q.push({i, i, 0}), ans[i][i] = 0, vis[i][i] = 1;for (int i = 1; i <= n; i ++)for (int j = 1; j <= n; j ++){cin >> a[i][j];if (a[i][j] != '-' && i != j)q.push({i, j, 1}), ans[i][j] = 1, vis[i][j] = 1;}while (!q.empty()){node t = q.front();	q.pop();int u = t.u, v = t.v, s = t.size;for (int i = 1; i <= n; i ++)if (a[i][u] != '-')for (int j = 1; j <= n; j ++)if (a[i][u] == a[v][j] && vis[i][j] == 0)q.push({i, j, s + 2}), ans[i][j] = s + 2, vis[i][j] = 1;}for (int i = 1; i <= n; i ++){for(int j = 1; j <= n; j ++)cout << ans[i][j] << ' ';cout << endl;}return 0;
}

 

 F. Alkane

         画几个烷烃会发现,设度数为 4 的点为主干,有 x 个,则总结点数是 3 * x + 2。因此我们只需要找到主干最多多少个。

        一个点在选出来的子图上能作为主干,那么它在原图上的度数一定大于等于 4。因此我在 dfs 树的时候只看度数大于等于 4 的点。

        dp [ u ] [ 0 ] :u 是根节点,他选 4 个儿子(如果有 4 个儿子的话,不足就是全选)

        dp [ u ] [ 1 ] :u 不是根节点,他还要留一条边给父节点,他只能选最大的 3 个儿子

        dp 里面存的是主干节点的个数,和任何叶子结点都无关!

        那么如何增加选择的子图中一个点只能有 4 个度?就体现在转移方程的时候,对每个主干点只选 3 个或者 4 个儿子。

 

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 2e5 + 5, INF = 1e18;int T, n, cnt, ans, d[N], vis[N], dp[N][2];
string s;
vector<int> G[N];void dfs(int u)
{vis[u] = 1;vector<int> t;for (int i = 0; i < G[u].size(); i ++){int v = G[u][i];if (d[v] >= 4 && vis[v] == 0){dfs(v);t.push_back(dp[v][1]);}}sort(t.begin(), t.end(), greater<int>());for (int i = 0; i < t.size() && i < 3; i ++)	// 不一定有 3 个度数大于等于 4 的儿子 dp[u][1] += t[i];dp[u][0] = dp[u][1];if (t.size() >= 4)dp[u][0] += t[3];
}signed main()
{cin >> n;for (int i = 1; i <= n; i ++)dp[i][1] = 1;for (int i = 1; i < n; i ++){int u, v;cin >> u >> v;G[u].push_back(v), G[v].push_back(u);d[u] ++, d[v] ++;}for (int i = 1; i <= n; i ++)if (d[i] >= 4 && vis[i] == 0)dfs(i);for (int i = 1; i <= n; i ++)ans = max(ans, dp[i][0]);if (ans == 0)cout << "-1";elsecout << ans * 3 + 2;return 0;
}
http://www.dtcms.com/wzjs/351574.html

相关文章:

  • html网站开头怎么做seo公司服务
  • 做站群的网站怎么来国内最新新闻摘抄
  • 衡水做网站推广找谁搜收录批量查询
  • 手机端 网站 模板seo计费怎么刷关键词的
  • 做课件挣钱的网站备案域名交易平台
  • 建立平台网站需要花多少钱seo网络营销课程
  • 建网站 服务器需要安装 tomcat搜索引擎优化包括哪些内容
  • 新泰房产网58个人出售seo教程下载
  • wordpress标题去掉私密搜索引擎优化seo课程总结
  • 建设公司网站的意义新网站排名优化怎么做
  • 网络工程师证书考试内容seo网站推广批发
  • 电子商务平台经营者制定平台服务协议和交易规则时郑州网站seo
  • 网站怎么做舆情监测宁波seo怎么做引流推广
  • css网站导航菜单手机刷网站排名软件
  • 甘肃做高端网站广告营销推广方案
  • 有没有学做家具的网站技术优化seo
  • 宁波方太集团网站建设谷歌浏览器官方正版下载
  • 如何在阿里巴巴上建设公司网站怎么能在百度上做推广
  • 做网站的专业词汇百度的广告推广需要多少费用
  • wordpress做的网站效果6纯注册app拉新挣钱
  • 石家庄免费专业做网站网络宣传推广
  • 闵行做网站的公司2022适合小学生的简短新闻摘抄
  • 龙岗模板网站建设百度客户端电脑版
  • 厦门做企业网站多少钱百度拍照搜题
  • 做外贸的网站b2c网站如何注册
  • 本地电脑做网站网络服务运营商
  • c 做特产网站易观数据app排行
  • 织梦cms手机网站源码聊石家庄seo
  • 企业建站划算吗网上怎么注册公司免费的
  • wordpress 插件 打不开飞猪关键词排名优化