摘要:思路是老师上课讲的。先找入度为0的点,然后删去该点以及从该点出去的边,然后再找入度为0的点,直到找不到为止:WA了3次主要是因为把序号为1 的点当作了第一个入度为0的点。这在题目中是没有描述的,所以第一个也得找。代码如下:#include #include using namespace std;
const int maxn = 100+10;
int topo[maxn][maxn], visit[maxn], m, n, flag=0;
int init()//输入边
{ for(int i = 0; i >a>>b; if(a!=b) top...
阅读全文
摘要:开始的时候我钻了牛角尖,总是想用dfs()找到一条欧拉回路,憋了好几天也没憋出来,就只好屈从了欧拉定理,代码如下,不算高效的代码:#include #include using namespace std;
int n, m, start = 0, in[250][250], visit[250], du[250];
int input()
{ memset(in,0,sizeof(in)); memset(visit,0,sizeof(visit)); memset(du,0,sizeof(du)); cin>>m; int a, b, _m=m;...
阅读全文
摘要:用的深搜,dfs();挨个点染色,有边的两点染不用的颜色,分别用1,-1表示,同时判断跟这个点有联系的点是否有相同的颜色。代码不长:#include #include using namespace std;
int n, in[250][250], visit[250];
int input()
{ memset(in,0,sizeof(in)); memset(visit,0,sizeof(visit)); int t; cin>>t; while(t--) { int a, b; cin>>a>>b; ...
阅读全文
摘要:开始的时候看到人家交的代码有8ms 过的,以为是用的新算法,而不是耗时的暴力,但是经过层层优化,我发现暴力并不是想像中的那么耗时阿,虽然没有达到8ms 的境界,但是我的代码着实优化了不少,时间有限,更省时的代码待以后有时间再讨论,暂且贴下目前的代码。代码如下;#include using namespace std;
int n, xy[150][2];
int bao (int a, int b)
{ int count = 0; for(int i = 0; i 0)count++; else if(xy[i][0]*a+xy[i][1]*b==0)ret...
阅读全文
摘要:就是找正环,再找路径,详细的待以后再讨论先贴上代码:dfs+dfs:#include #include using namespace std;
struct Room{ int value,count; int list[100];
};
Room room[150];
int n, value[150], visit[150] = {0, 0, 0};;
void input()
{ for(int i = 1; i >room[i].value>>room[i].count; int len = room[i].count; f...
阅读全文