CSP
- 2013-12-4 有趣的数
- 2013-12-5 I'm stuck
- 2014-3-4 无线网络
- 2014-3-5任务调度
- 2014-9-4最优配餐
- 2014-9-5拼图
- 2014-12-4 最优灌溉
- 2014-12-5货物调度
- [2015-3-1 网络延时](http://118.190.20.162/view.page?gpid=T24)
- 2015-3-5 最小花费
- 2015-9-4 高速公路
- 2015-9-5 最佳文章
- 2015-12-4 送货
- 2015-12-5 矩阵
- 2016-4-4游戏
- 2016-4-5网络连接
- 2016-9-4交通规则
- 2016-9-5祭坛
- 2016-12-4压缩编码
- 2016-12-5卡牌游戏
- 2017-3-4地铁修建
- 2017-3-5引水入城
- 2017-9-4网络通信
- 2017-9-5除法
- 2017-12-4行车路线——Dijkstra(拆点)
- 2017-12-5商路
- 2018-3-4棋局评估
- 2018-3-5二次求和
- 2018-9-4再卖菜
- 2018-9-5线性递推式
- 2018-12-4数据中心——最小生成树
- 2018-12-5管道清洁
- 2019-3-4消息传递接口
- 2019-3-5 317号子任务
- 2019-9-4推荐系统
- 2019-9-5城市规划
- 2019-12-4区块链
- 2019-12-5魔数
- 2020-6-4 1246
- 2020-6-5乔乔和牛牛逛超市
- 2020-9-4星际旅行
- 2020-9-5密信与计数
- 2020-12-4食材运输
- 2020-12-5星际旅行——线段树
- 2021-4-4校门外的树——DP
- 2021-4-5疫苗运输
- 2021-9-4收集卡牌——数学期望
- 2021-9-5 箱根山岳险天下——动态树
- 2021-12-4磁盘文件操作
- 2021-12-5极差路径
- 2022-3-4通信系统管理
- 2022-3-5博弈论与石子合并
- 2022-6-4光线追踪
- 2022-6-5 PS无线版
- 2022-9-4吉祥物投票——并查集加set
- 2022-9-5高维亚空间超频物质变压缩技术
- 2022-12-4聚集方差——树形结构
- 2022-12-5星际网络
- 2023-3-4星际网络II——线段树
- 2023-3-5施肥——线段树、树状数组、分治
2013-12-4 有趣的数
2013-12-5 I’m stuck
10%
#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
#define x first
#define y second
using namespace std;
typedef pair<int ,int >PII;
int n,m;
const int N=60;
char g[N][N];
int res=0;
bool flag=0;
bool st[N][N];
void bfs(int x,int y)
{
queue<PII> q;
q.push({
x,y});
st[x][y]=1;
int dy[4]={
0,0,-1,1},dx[4]={
-1,1,0,0};
while(q.size())
{
PII t=q.front();
q.pop();
st[t.x][t.y]=1;
if(g[t.x][t.y]=='S'||g[t.x][t.y]=='+')
{
int cnt=0;
for(int i=0;i<4;i++)
{
int sx=t.x+dx[i],sy=t.y+dy[i];
if(g[sx][sy]=='#'||sx<0||sx>=n||sy<0||sy>=m||st[sx][sy])
{
cnt++;
continue;
}
else q.push({
sx,sy});
}
if(cnt==4) res++;
}
else if(g[t.x][t.y]=='|')
{
int cnt=0;
for(int i=0;i<2;i++)
{
int sx=t.x+dx[i],sy=t.y+dy[i];
if(g[sx][sy]=='#'||sx<0||sx>=n||st[sx][sy])
{
cnt++;continue;
}
else q.push({
sx,sy});
}
if(cnt==2) res++;
}
else if(g[t.x][t.y]=='-')
{
int cnt=0;
for(int i=2;i<4;i++)
{
int sx=t.x+dx[i],sy=t.y+dy[i];
if(g[sx][sy]=='#'||sy<0||sy>=m||st[sx][sy])
{
cnt++;
continue;
}
else q.push({
sx,sy});
}
if(cnt==2) res++;
}
else if(g[t.x][t.y]=='.')
{
if(g[t.x+1][t.y]=='#'||t.x+1>=n||st[t.x+1][t.y])
{
res++;
continue;
}
else q.push({
t.x+1,t.y});
}
else
{
flag=1; //可以走到终点
int cnt=0;
for(int i=0;i<4;i++)
{
int sx=t.x+dx[i],sy=t.y+dy[i];
if(g[sx][sy]=='#'||sx<0||sx>=n||sy<0||sy>=m||st[sx][sy])
{
cnt++;
continue;
}
else q.push({
sx,sy});
}
if(cnt==4) res++;
}
}
}
int main()
{
cin>>n>>m;
for(int i=0;i<n;i++) cin>>g[i];
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
if(g[i][j]=='S') bfs(i,j);
if(!flag) puts("I'm stuck!");
else cout<<res;
}
2014-3-4 无线网络
2014-3-5任务调度
2014-9-4最优配餐
2014-9-5拼图
** 一定有无解的情况:输出0**
2014-12-4 最优灌溉
最小生成树
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=1010,INF=0x3f3f3f3f,M=1010;
int g[M][M],d[N];
bool st[N];
int n,m;
int prim()
{
memset(d,0x3f,sizeof d);
int res=0;
for(int i=0;i<n;i++)
{
int t=-1;
for(int j=1;j<=n;j++)
if(!st[j]&&(t==-1||d[t]>d[j]))
t=j;
if(i&&d[t]==INF) return INF;
if(i) res+=d[t];
for(int j=1;j<=n;j++) d[j]=min(d[j],g[t][j]);
st[t]=true;
}
return res;
}
int main()
{
cin>>n>>m;
memset(g,0x3f,sizeof g);
while(m--)
{
int a,b,c;
cin>>a>>b>>c;
g[a][b]=g[b][a]=c;
}
int t=prim();
cout<<t;
}
2014-12-5货物调度
2015-3-1 网络延时
树的直径
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=20010,M=20010;
int n,m;
int h[N],ne[M],e[M],idx;
int ans;
void add(int a,int b)
{
e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}
int dfs(int u)
{
int d1=0,d2=0;
for(int i=h[u];~i;i=ne[i])
{
int j=e[i];//当前点的编号
int d=dfs(j);//往下走的最大距离
if(d>=d1) d2=d1,d1=d;
else if(d>d2) d2=d;
}
ans=max(ans,d1+d2);
return d1+1;//当前点加上面一条边
}
int main()
{
cin>>n>>m;
memset(h,-1,sizeof h);