1. 0254游戏网首页
  2. 系统攻略

0x3f3f3f3f意思详细介绍

0x3f3f3f3f意思详细介绍

不少用户在使用电脑的时候都接触过0x3f3f3f3f这个数值但是大多数都不知道这是什么意思,今天本文就给大家带来了0x3f3f3f3f意思详细介绍,快来了解一下吧。

0x3f3f3f3f是什么意思:

1、整数的两倍不超过 0x7f7f7f7f,则int表示的最大正整数。

2、整数的第八位字节都是相同的,在程序设计中经常需要使用 memset(a, val, sizeof a) 初始化一个数组a,

语句把数值 val(0x00~0xFF)填充到数组a 的每个字节,所用memset只能赋值出“每8位都相同”的 int。

3、当你需要吧一个数组中的数值初始化成正无穷大时就需要用0x3f3f3f3f数值代替,避免加法算数溢出。

以上就是为大家整理的0x3f3f3f3f意思详细介绍,是非常重要的数值能够很好的帮你进行编程,更多相关信息可以继续关注百科书哦~

C++实习题 高手来

你被分配到设计在广域某些点之间的网络连接。你是给该地区的一个点集,以及可能的路线,可能的电缆连接点对。对于每两点之间可能的途径,您将得到的是需要在这条道路连接点电缆长度。请注意有可能存在两种可能由于点多线。据推测,可能是由于线路连接(直接或间接)在该地区的每两点。

??你的任务是设计的区域网络,从而有一个连接(直接或间接每两点之间)(即各点是相互关联的,但不一定是直接电缆),而且总长度所使用的电缆是最小的。
输入格式:(b4.in)

??输入文件包含的数据集的数目。每个数据集定义一个所需的网络。集合的第一行包含两个整数:首先定义了给定的点的数量P和第二所给予航线之间的点数R。 R线以下两点之间的定义给定的路线,各以三个整数:前两个数字识别点,第三给出了路线的长度。这些数字之间用空格。一个数据集只给一个数P = 0表示的输入端。数据集之间用一个空行。

??点的最大数量为50。在某航线的最大长度为100。可能的路线是无限的。这些节点的确定1和P之间的整数(含)。两点之间的路线i和j可以得到尽可能ij或为J岛

输出格式:(b4.out)

??对于每个数据集,一个号码印刷在单独行给出了整个设计的网络中使用的电缆总长度。

Sample Input:
1 0

2 3
1 2 37
2 1 17
1 2 68

3 7
1 2 19
2 3 11
3 1 7
1 3 5
2 3 89
3 1 91
1 2 32

5 7
1 2 5
2 3 7
2 4 8
4 5 11
3 5 10
1 5 6
4 2 12

0

Sample Output:
0
17
16
26

在求最小费用流时,采用消除负费用圈的算法;怎么样用代码查找到负费用圈;求代码

你可以先做一下POJ2175这个题:
关于查找负费用圈:
用spfa循环超过n次跳转出来,说明有负圈,在spfa中纪录某个节点的前驱节点pre,跳转后从任意一个点开始沿pre找第一个访问过的节点,则这个点一定在负圈上。
然后根据这个点沿pre继续找,就可以遍历这个负圈。
以下是代码:
#include<stdio.h>
#include<string.h>
#include<vector>
#include<queue>
#include<cmath>
using namespace std;
#define inf 0x3f3f3f3f
#define N 250
#define M 20500
struct node
{
int x,y;
int c;
}a[205];
int e,head[N],pnt[M],nxt[M],cost[M];
void addedge(int u,int v,int c)
{
pnt[e]=v;
nxt[e]=head[u];
cost[e]=c;
head[u]=e++;
}
int cal(node a,node b)
{
return abs(a.x-b.x)+abs(a.y-b.y)+1;
}
int b[N][N];
int dist[N],cnt[N],pre[N];
char vis[N];
int relax(int u,int v,int c)
{
if(dist[v]>dist[u]+c)
{
dist[v]=dist[u]+c;
pre[v]=u;
return 1;
}
return 0;
}
int spfa(int s,int n)
{
int i,u;
queue<int>q;
for(i=1;i<=n;i++)
dist[i]=inf;
memset(pre,-1,sizeof(pre));
memset(vis,0,sizeof(vis));
memset(cnt,0,sizeof(cnt));
dist[s]=0; cnt[s]++;
q.push(s); vis[s]=1;
while(!q.empty())
{
u=q.front();q.pop();
vis[u]=0;
for(i=head[u];i!=-1;i=nxt[i])
if(relax(u,pnt[i],cost[i])==1&&vis[pnt[i]]==0)
{
vis[pnt[i]]=1;
q.push(pnt[i]);
if(++cnt[pnt[i]]>n) return pnt[i];
}
}
return 0;
}
int sum[N];
int main()
{
int n,m,i,j,c,u;
while(scanf("%d%d",&n,&m)!=EOF)
{
for(i=1;i<=n;i++)
scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].c);
for(i=1;i<=m;i++)
scanf("%d%d%d",&a[i+n].x,&a[i+n].y,&a[i+n].c);
e=0;memset(head,-1,sizeof(head));
memset(sum,0,sizeof(sum));
memset(b,0,sizeof(b));
for(i=1;i<=n;i++)//剩余网络,只要边上的流量小于容量,则连边,因为源点满流,所以源点可忽略
for(j=1;j<=m;j++)
{
scanf("%d",&c);
sum[j]+=c;
b[i][j+n]=c;
int len=cal(a[i],a[j+n]);
addedge(i,j+n,len);
if(c>0)
addedge(j+n,i,-len);
}
for(j=1;j<=m;j++)
{
if(sum[j]!=0)
addedge(m+n+1,j+n,0);
if(sum[j]<a[j+n].c)
addedge(j+n,m+n+1,0);
}
int flag=spfa(m+n+1,m+n+1); //判断有没有负圈
if(flag)
{
printf("SUBOPTIMAL ");
u=flag;
memset(vis,0,sizeof(vis));
while(!vis[u]) //确定负圈中的一个点,因为在负圈中的必重复出现
{
vis[u]=1; u=pre[u];
}
flag=u;
do //更新流量
{
if(pre[u]<=n&&u>n)
b[pre[u]][u]++;
if(pre[u]>n&&u<=n)
b[u][pre[u]]--;
u=pre[u];
}while(u!=flag);
for(i=1;i<=n;i++,puts(""))
for(j=1;j<=m;j++)
printf("%d ",b[i][j+n]);
}
else
printf("OPTIMAL ");
}
return 0;
}

间谍网络 跪求答案!

tarjan缩点,然后拓扑,判断入度为0的大点里面有没有能收买的,全有就记录总和,有一个没有就输出no,然后tarjan过程中记录最小编号



#include<iostream>

#include<algorithm>

#include<cstdio>

#include<stack>

#include<cstring>

using namespace std;

typedef long long ll;

typedef pair<int,int> pii;

#define mod 1e9+7

const int maxn=3005;

const int maxm=8005;

struct edge

{

int to,next;

}g[maxm];

int head[maxn],cnt=0;

int n,p,m;

int val[maxn];

int ans=0;

int dfn[maxn],low[maxn],t=0;

int cost[maxn];

stack<int> s;

int in[maxn];

int is[maxn],bcc_cnt=0;

int id_min[maxn];

bool color[maxn];

inline void add(int a,int b)

{

g[++cnt].to=b;

g[cnt].next=head[a];

head[a]=cnt;

return ;

}

void tarjan(int u)

{

dfn[u]=low[u]=++t;

s.push(u);

for(int i=head[u];i;i=g[i].next)

{

int v=g[i].to;

if(!dfn[v])

{

tarjan(v);

low[u]=min(low[u],low[v]);

}

else if(!is[v]) low[u]=min(low[u],dfn[v]);

}

if(dfn[u]==low[u])

{

bcc_cnt++;

while(1)

{

int x=s.top();

s.pop();

is[x]=bcc_cnt;

id_min[bcc_cnt]=min(id_min[bcc_cnt],x);

if(val[x]!=0x3f3f3f3f)

{

cost[bcc_cnt]=min(cost[bcc_cnt],val[x]);

color[bcc_cnt]=1;

}

if(x==u) break;

}

}

return ;

}

int main()

{

scanf("%d",&n);

memset(val,0x3f,sizeof(val));

memset(in,0,sizeof(in));

memset(id_min,0x3f,sizeof(id_min));

scanf("%d",&p);

while(p--)

{

int a,b;

scanf("%d%d",&a,&b);

val[a]=b;

}

scanf("%d",&m);

for(int i=1;i<=m;i++)

{

int a,b;

scanf("%d%d",&a,&b);

add(a,b);

}

memset(cost,0x3f,sizeof(cost));

for(int i=1;i<=n;i++) if(!dfn[i]) tarjan(i);

for(int i=1;i<=n;i++)

{

for(int j=head[i];j;j=g[j].next)

{

int v=g[j].to;

if(is[i]!=is[v]) in[is[v]]++;

}

}

int flag=1;

for(int i=1;i<=bcc_cnt;i++)

{

if(!in[i]&&color[i]) ans+=cost[i];

else if(!in[i]&&color[i]==0) flag=0;

}

if(flag)

{

printf("YES ");

printf("%d",ans);

return 0;

}

ans=0x3f3f3f3f;

printf("NO ");

for(int i=1;i<=n;i++)

{

for(int j=head[i];j;j=g[j].next)

{

int v=g[j].to;

if(color[is[i]]&&is[i]!=is[v]) color[is[v]]=1;

}

}

for(int i=1;i<=bcc_cnt;i++) if(!color[i]) ans=min(ans,id_min[i]);?

printf("%d",ans);

return 0;

}


声明: 我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理,本站部分文字与图片资源来自于网络,转载是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们(管理员邮箱:daokedao3713@qq.com),情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!