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

哪个网站做平面能兼职企业网站有哪些功能

哪个网站做平面能兼职,企业网站有哪些功能,做棋牌网站违法嘛,2017我们一起做网站C. Cycle Graph? 题意 给你一个 N N N 个顶点 M M M 条边的简单(无重边、自环)无向图,第 i i i 条边连接节点 A i A_i Ai​ 和 B i B_i Bi​,判断这个图是不是一个环。 思路 首先一个图是环,要满足点数等于边…

C. Cycle Graph?

题意

给你一个 N N N 个顶点 M M M 条边的简单(无重边、自环)无向图,第 i i i 条边连接节点 A i A_i Ai B i B_i Bi,判断这个图是不是一个环。

思路

首先一个图是环,要满足点数等于边数,即 N = M N=M N=M

其次,这个图必须连通,可以通过 DFS \text{DFS} DFS BFS \text{BFS} BFS 搜索判断是否连通(从任意一点开始搜,结束后检查是否每个点都已到达过);

最后,每个点的度数(所连接的顶点数)必须为 2 2 2

可以证明,只要满足上述三个条件,这个图一定是一个环。

C++ 代码

#include<bits/stdc++.h>
using namespace std;
const int maxn=200005;
int n,m;
int deg[maxn];
vector<int> g[maxn];
bool used[maxn];
void dfs(int v){used[v]=true;for(int x:g[v]){if(!used[x]){dfs(x);}}
}
int main(){cin>>n>>m;if(n!=m){cout<<"No\n";return 0;}for(int i=1;i<=m;i++){int u,v; cin>>u>>v;g[u].push_back(v);g[v].push_back(u);}dfs(1);for(int i=1;i<=n;i++){if(!used[i]||g[i].size()!=2){cout<<"No\n";return 0;}}cout<<"Yes\n";return 0;
}

D. Goin’ to the Zoo

题意

N N N 个动物园,动物园 i i i 入场费为 C i C_i Ci M M M 种动物,第 j j j 种动物可以在共 K j K_j Kj 个动物园看到,分别为动物园 A j , 1 , A j , 2 , . . . , A j , K j A_{j,1},A_{j,2},\ ...,A_{j,K_j} Aj,1,Aj,2, ...,Aj,Kj

要看每种动物至少两次,至少花多少钱。

注:只要花一次 C i C_i Ci,就可以进入动物园 i i i 一次,就可以看里面的每个动物一次;若花两次,则可进入两次,看里面的动物两次

思路

由于 N ≤ 10 , M ≤ 100 N \le 10,M\le 100 N10,M100,可以想到用状态压缩(不是dp)枚举。

状态压缩,就是把状态压缩到一个数字里

大致思路如下:

140 140 140 为例,三进制数为 12012 12012 12012

这样, 1 ∼ 3 N 1\sim 3^N 13N 的每个数字都有了实际含义

只要枚举 1 ∼ 3 N 1\sim3^N 13N 的每个数,判断这样参观动物园能否达成“每种动物至少看两次”的目标,若可以,则记录答案,取最小值。

时间复杂度 O ( N M ⋅ 3 N ) O(NM·3^N ) O(NM3N)

C++ 代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int inf=3e18;
const int maxn=1000005;
int c[maxn];
int k[105];
int v[105][105];
int mask[105];
int n,m;
signed main(){cin>>n>>m;for(int i=1;i<=n;i++){cin>>c[i];}for(int i=1;i<=m;i++){cin>>k[i];for(int j=0;j<k[i];j++){cin>>v[i][j];}}int ans=inf;for(int msk=0;msk<pow(3ll,n);msk++){memset(mask,0,sizeof(mask));//mask为当前数字所对应的三进制数int num=0;//num为花费int p=msk;for(int i=1;i<=n;i++){num+=(p%3)*c[i];for(int j=1;j<=m;j++){for(int a=0;a<k[j];a++){if(v[j][a]==i) mask[j]+=p%3;}}p/=3;}bool flag=true;for(int j=1;j<=m;j++){if(mask[j]<2) flag=false;}if(flag) ans=min(ans,num);}cout<<ans<<endl;return 0;
}

E. Bowls and Beans

题意

N N N 个碗排成一排,编号为 0 ∼ N − 1 0\sim N-1 0N1,碗 i i i 中有 A i A_i Ai 个豆子,上面写着一个数字 C i C_i Ci

每次操作可以将碗 i i i 里的豆子可以放到之前 i − C i ∼ i − 1 i-C_i \sim i-1 iCii1 中的任意碗里,并且可以任意分配每个碗里放几颗。

最初碗 0 0 0 中没有豆子,问:将所有豆子都移到碗 0 0 0 中,最少需要多少步。

思路

贪心好像也可以,但是我不会!!

N ≤ 2000 N \le 2000 N2000,考虑 O ( N 2 ) O(N^2) O(N2) 动态规划。

动态规划基本三步:

  1. 设计 DP \text{DP} DP 状态:

​ 定义 f i f_i fi 表示将编号 ≥ i \ge i i 的所有碗中的豆子全部移到碗 i i i 中的最小步骤;

  1. 初始化:

​ 设最后一个有豆子的碗为 p p p,则对于 i = p ∼ n − 1 i=p\sim n-1 i=pn1 f i = 0 f_i=0 fi=0(不需要操作),其余初始 f i = ∞ f_i=\infty fi=

  1. 转移顺序及转移方程:

    顺序:由于每个碗里的豆子只能往前移,为避免转移产生影响后续计算,应从后往前转移;

    满足以下条件时, f i = min ⁡ ( f i , f j + 1 ) f_i=\min(f_i,f_j+1) fi=min(fi,fj+1)

    • 条件1: j > i j>i j>i

    • 条件2:碗 j j j 的豆子可以移到碗 i i i 中,即 j − i ≤ C j j-i \le C_j jiCj

    • 条件3:若 i − j ≥ 2 i-j\ge2 ij2 i + 1 i+1 i+1 j − 1 j-1 j1 之间的任何一个碗都没有豆子(否则不可能一步就完成 j → i j \rightarrow i ji 的操作)。

C++ 代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int inf=3e18;
const int maxn=2005;
int n;
int c[maxn],f[maxn];
bool a[maxn];
signed main(){cin>>n;for(int i=1;i<n;i++) cin>>c[i];for(int i=1;i<n;i++) cin>>a[i];//初始化for(int i=0;i<n;i++) f[i]=inf;int pos;for(int i=n-1;i>=0;i--){f[i]=0;if(a[i]){pos=i-1;break;}}//转移for(int i=pos;i>=0;i--){//为了避免产生后效性,从后往前遍历for(int j=i+1;j<n;j++){//为了满足条件1,j=i+1开始if(j-i<=c[j]) f[i]=min(f[i],f[j]+1);//为了满足条件2if(a[j]) break;//为了满足条件3,只要遇到了有豆子的碗就退出}}cout<<f[0]<<endl;return 0;
}

G. Specified Range Sums

题意

有三个长度为 M M M 的序列 L , R , S L,R,S L,R,S,你要判断是否存在一个长度为 N N N正整数 序列 A A A,满足以 ∑ j = L i R i A j = S i \sum_{j=L_i}^{R_i} A_j=S_i j=LiRiAj=Si

若存在,找到最小的 ∑ j = 1 N A j \sum_{j=1}^N A_j j=1NAj;否则,输出 -1

思路

首先,我们考虑将求和转换为前缀和,即定义 C i = ∑ j = 1 i A j C_i=\sum_{j=1}^iA_j Ci=j=1iAj,则 C R i − C L i − 1 = S i C_{R_i}-C_{L_i-1}=S_i CRiCLi1=Si

建立有向图,顶点编号为 0 ∼ n 0 \sim n 0n,这样连边: ( L i − 1 , R i ) = S i (L_i-1,R_i)=S_i (Li1,Ri)=Si ( R i , L i − 1 ) = − S i (R_i,L_i-1)=-S_i (Ri,Li1)=Si。另外,由于是正整数序列,所以 ( i + 1 , i ) = − 1 (i+1,i)=-1 (i+1,i)=1

我们需要计算 n → 0 n \rightarrow 0 n0 的最短路,答案即为这个值的相反数。

注意:无解时图中有负环,所以 Dijkstra \text{Dijkstra} Dijkstra 不可以。考虑可以处理负环的 Bellman-Ford \text{Bellman-Ford} Bellman-Ford 算法(不会没关系,下面讲):

与图上动态规划相似,定义 d i s i dis_i disi 表示 从 n n n i i i 的最短路, d i s n = 0 dis_n=0 disn=0,其余为 ∞ \infty

共进行 N N N 次操作,每次操作如下:

  • 对于每一条有向边 ( u , v ) = w (u,v)=w (u,v)=w d i s v = min ⁡ ( d i s v , d i s u + w ) dis_v=\min(dis_v,dis_u+w) disv=min(disv,disu+w),共 M M M 条边。

复杂度为 O ( N M ) O(NM) O(NM),通常把上述操作称作 松弛(relax)

在这 N N N 次松弛之后,再执行第 N + 1 N+1 N+1 次操作,若还可以继续执行松弛操作,就说明图中存在负环,无解,输出 − 1 -1 1

最终答案即为 − d i s 0 -dis_0 dis0

C++ 代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int inf=3e18;
const int maxn=4005;
int n,m;
struct Node{int u,v,w;
};
vector<Node> v;
int dis[maxn];
signed main(){cin>>n>>m;//建图 连边for(int i=1;i<=m;i++){int l,r,s;cin>>l>>r>>s;v.push_back({l-1,r,s});v.push_back({r,l-1,-s});}for(int i=0;i<n;i++) v.push_back({i+1,i,-1});//初始化for(int i=1;i<=n;i++) dis[i]=inf;dis[n]=0;//Bellman-Ford计算最短路  直接将第N+1次操作放入循环中for(int i=1;i<=n+1;i++){for(Node e:v){if(dis[e.v]>dis[e.u]+e.w){if(i==n+1){//若已经执行完n+1次松弛还可以继续执行,则无解cout<<-1<<endl;return 0;}dis[e.v]=dis[e.u]+e.w;}}}cout<<-dis[0]<<endl;	return 0;
}
http://www.dtcms.com/wzjs/89724.html

相关文章:

  • 老河口做网站浑江区关键词seo排名优化
  • 微信怎么制作自己的小程序厦门关键词优化平台
  • 强的网站建设公司网络营销是指什么
  • 如何给网站做提升网站收录情况
  • 农家院做宣传应该在哪个网站千锋教育培训机构学费
  • 互联网兼职做网站维护爱站网 关键词挖掘工具
  • 南昌网站建设方案维护seo咨询师招聘
  • 威客类网站开发广州网络推广定制
  • 上海网站建设信息网适合员工的培训课程
  • 湖州做网站公司汕头网站建设开发
  • 运动类网站东营网站建设
  • 网站建设徐州html网页制作成品
  • axure可以做网站外贸推广网站
  • 建设网站市场规模产品营销推广方案
  • 网站首页怎么做如何做好营销推广
  • 网站图片轮播怎么做的云南seo公司
  • 机械技术支持中山网站建设seo网站推广技术
  • 百度山西网站建设和百度推广网站推广的方法有哪几种
  • 幼儿园网站建设方案如何宣传推广
  • 福州做网站的公司有哪些夸克浏览器网页版入口
  • 做网站 注意宁波seo博客
  • 网站建设的功能有哪些安徽网络关键词优化
  • 武汉建设委员会安康地seo
  • 网站建设师杭州网站推广找哪家
  • 广东网站优化公司百度网盘手机版
  • 汕头网站排名优化以下属于网站seo的内容是
  • 物流网站建设公司电商培训机构有哪些?哪家比较好
  • 做兼职拍照片传网站站内搜索引擎
  • 网站建设维护论文青岛的seo服务公司
  • 网站制作网站建设需要多少钱搜索引擎入口google