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

哪些网站可以做调查问卷/百度推广联系人

哪些网站可以做调查问卷,百度推广联系人,冠县网站设计,重庆本地建站畅通工程 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 27521 Accepted Submission(s): 12062Problem Description省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有…

畅通工程

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 27521    Accepted Submission(s): 12062


Problem Description
省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可)。经过调查评估,得到的统计表中列出了有可能建设公路的若干条道路的成本。现请你编写程序,计算出全省畅通需要的最低成本。

Input
测试输入包含若干测试用例。每个测试用例的第1行给出评估的道路条数 N、村庄数目M ( < 100 );随后的 N 
行对应村庄间道路的成本,每行给出一对正整数,分别是两个村庄的编号,以及此两村庄间道路的成本(也是正整数)。为简单起见,村庄从1到M编号。当N为0时,全部输入结束,相应的结果不要输出。

Output
对每个测试用例,在1行里输出全省畅通需要的最低成本。若统计数据不足以保证畅通,则输出“?”。

Sample Input
3 3 1 2 1 1 3 2 2 3 4 1 3 2 3 2 0 100

Sample Output
3 ?
//1. 假设有一棵树只包含一个顶点的v的树T。
//2.贪心的选取T和其他顶点之间相连的最小权值的边,并将它加入T中.
//3.不断重复1,2 直到所有的点相连生成一棵最小生成树。
#include<queue>
#include<stack>
#include<math.h>
#include<stdio.h>
#include<numeric>//STL数值算法头文件
#include<stdlib.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<functional>//模板类头文件
using namespace std;const int INF = 1e9+7;
const int VM = 103;
int G[VM][VM];//存图
void prim(int n)
{int record[VM];//记录 边的权值bool vis[VM];//记录是否访问int ans = 0;memset(vis, 0, sizeof(vis));//初始化for (int i = 1; i <= n; i++)record[i] = G[1][i];//初始化record[1] = 0;vis[1] = true;// 1 点标记为已访问int i;for (i = 2; i <= n; i++)  //进行 n - 1 次操作{int u = INF;//初始化int k;for (int j = 1; j <= n; j++)  //遍历所有顶点{if (!vis[j] && u > record[j])  //在所有的未加入的点中  找一个最小的权值{k = j;//记录下标u = record[j];//更新最小值}}if (u == INF)//若图是不连通的break;//提前退出vis[k] = true;//标记为已加入ans += u;//加权值for (int j = 1; j <= n; j++)  //遍历所有的点{if (!vis[j] && record[j] > G[k][j])//对未加入的点&&能找到与此点相连且的权值最小的边record[j] = G[k][j];//进行更新}}//输出if (i - 1 == n)printf("%d\n", ans);elseprintf("?\n");
}
int main()
{int n, m;while (scanf("%d %d", &n, &m), n)  //对边数 和点数的获取{for (int i = 1; i <= m; i++)  //初始化{for (int j = 1; j <= m; j++){G[i][j] = i == j ? 0 : INF;}}while (n--){int u, v, w;scanf("%d %d %d", &u, &v, &w);//获取 数据if (G[u][v] > w)//防止重边&&存两点之间的最短距离G[u][v] = G[v][u] = w;}prim(m);//调用函数}return 0;
}
优化#include <queue>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define LL long long
using namespace std;const int INF = 1e9+7;
const int VM = 103;typedef pair<int, int>P;//对组
struct node  //前向星 结构体
{int v, w;int next;
};
node edge[4 * VM];//前向星数组
int head[VM];//头指针数组
int cnt;//计数
void add(int u, int v, int w)  //加边函数
{edge[cnt].v = v;//顶点edge[cnt].w = w;//权值edge[cnt].next = head[u];//下一个head[u] = cnt++;//头指针
}void prim(int n)  //普利姆函数
{bool vis[VM];//标记是否访问过int record[VM];//记录权值int ans = 0;//最小生成树的总值int count = 0;//计数priority_queue<P, vector<P>, greater<P> >que;//权值从小到大的队列fill(record, record + VM, INF);//初始化memset(vis, 0, sizeof(vis));//初始化record[1] = 0;//初始化que.push(P(0, 1));//将 1点 和 record[1] = 0 放入队列while (!que.empty())  //队列不为空时{P p = que.top();//取出队首que.pop();//删除int u = p.second;//if (vis[u] == true)//若此顶点已经加入生成树continue;//vis[u] = true;//否则,就标记为加入ans += record[u];//count++;//加入点个数for (int i = head[u]; i != -1; i = edge[i].next)  //遍历与该点相邻的点{node e = edge[i];if (record[e.v] > e.w)  //更新他们的权值{record[e.v] = e.w;//que.push(P(record[e.v], e.v));//放入队列}}}//输出if (count == n)printf("%d\n", ans);elseprintf("?\n");
}
int main()
{int n, m;while (scanf("%d %d", &n, &m), n)  //边的个数 顶点个数{memset(head, -1, sizeof(head));//初始化cnt = 0;//初始化while (n--){int u, v, w;scanf("%d %d %d", &u, &v, &w);//获取数据add(u, v, w);//加边add(v, u, w);//无向图}prim(m);//普利姆算法}return 0;
}
//克鲁斯卡尔算法用并查集的优化
#include <queue>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define LL long long
using namespace std;
const int INF = 1e9+7;
const int VM = 103;
struct node  //边的结构体
{int u, v, w;
};
node edge[VM * 2];
int high[VM];//分组的高度
int par[VM];//父节点bool cmp(const node &a, const node &b)
{return a.w < b.w;//按w从小到大排序
}int find(int x)
{if(x!=par[x]) x=find(par[x]);return par[x];
}
bool same(int x, int y)  //判断为否在同一分组中
{return find(x) == find(y);
}
int unite(int x, int y)
{x = find(x);//查找根节点y = find(y);//查找根节点if(x!=y){par[x]=y;high[x]++;}
}
int main()
{int n, m;while (scanf("%d %d", &n, &m), n)  //获取边的个数 和顶点个数{int cnt = 0;//for (int i = 1; i <= m; i++)//初始化par[i] = i;memset(high, 0, sizeof(high));//初始化while (n--){scanf("%d %d %d", &edge[cnt].u, &edge[cnt].v, &edge[cnt].w);//获取数据cnt++;}sort(edge, edge + cnt, cmp);//按权值从小到大排序int ans = 0;//最小生成树 权值int count = 0;//计数for (int i = 0; i < cnt; i++)  //对所有的边{node e = edge[i];if (!same(e.u, e.v))  //若两点不属于一个分组{ans += e.w;//权值总和unite(e.u, e.v);//合并两点count++;//计数}}//输出if (count == m - 1)printf("%d\n", ans);elseprintf("?\n");}return 0;
}


 

 
 

 

转载于:https://www.cnblogs.com/nyist-xsk/p/7264877.html

http://www.jmfq.cn/news/4970161.html

相关文章:

  • 做独立网站需要软件吗/淘宝数据分析
  • 郴州做网站的/营销管理培训课程
  • 家乡网站设计模板/百度seo优化推广公司
  • 茶山网站建设公司/营销网络推广
  • 旅游网站建设成都/杭州网站seo公司
  • 云主机服务器/深圳企业seo
  • wordpress 国内加速/哈尔滨网络优化推广公司
  • 嘉兴微信网站建设/专业网页设计和网站制作公司
  • 大连的网站设计公司/北京做的好的seo公司
  • 申请网站建设的请示/教你如何快速建站
  • 桂林北京网站建设/推广代理公司
  • 现在建网站/品牌营销案例
  • 护肤品 网站建设策划书/seo蜘蛛池
  • 怎么自己做彩票网站/seo代码优化工具
  • 长春seo网站建设费用/技能培训
  • 小说网站开发的看书软件/seo值是什么意思
  • 网站流量如何盈利/天津百度推广电话号码
  • 承德市网站开发/磁力宝最佳搜索引擎入口
  • django网站开发实例源码/做app推广去哪找商家
  • 医社保增减员在什么网站做/现在网络推广方式
  • 要建一个网站该怎么做/知乎推广合作
  • 龙华专业做网站/百度竞价代理公司
  • 做水果的有什么网站/石家庄百度seo排名
  • 人才网站源码/外贸获客软件
  • 自动化科技产品网站建设/域名ip地址在线查询
  • 鞍山网站怎么做出来的/上海百度推广公司排名
  • 自建站什么意思/网络营销常见的工具
  • seo网站营销/西安网站定制开发
  • 建设公司网站靠谱吗/企业宣传推广
  • 网站备案提交资料/全网优化推广